Merge branch 'codes'
This commit is contained in:
commit
cd7775011c
|
|
@ -1,6 +1,43 @@
|
|||
|
||||
*.properties
|
||||
*.properties
|
||||
*.properties
|
||||
client/build/built-jar.properties
|
||||
client/nbproject/build-impl.xml
|
||||
client/nbproject/genfiles.properties
|
||||
client/nbproject/private/private.properties
|
||||
client/nbproject/project.properties
|
||||
client/problem.html
|
||||
client/test/output/Main.cpp
|
||||
clientUpdater/dist/clientUpdater.jar
|
||||
clientUpdater/dist/lib/Common.jar
|
||||
clientUpdater/dist/README.TXT
|
||||
Common/dist/Common.jar
|
||||
Judger/dist/Judger.jar
|
||||
Judger/dist/lib/Common.jar
|
||||
*.class
|
||||
*.properties
|
||||
*.html
|
||||
*.cpp
|
||||
*.jar
|
||||
*.class
|
||||
*.zip
|
||||
*.jar
|
||||
client/nbproject/private/private.properties
|
||||
*.class
|
||||
*.log
|
||||
*.exe
|
||||
*.class
|
||||
*.jar
|
||||
*.class
|
||||
*.class
|
||||
*.7z
|
||||
/client/dist/
|
||||
*.class
|
||||
/client/build/classes
|
||||
*.class
|
||||
/client/build
|
||||
/client/可运行客户端环境
|
||||
/Judger/备份
|
||||
/JuderUI/log
|
||||
/JuderUI/build
|
||||
/JuderUI/log
|
||||
/client/build
|
||||
/client/可运行客户端环境
|
||||
|
|
|
|||
|
|
@ -0,0 +1,8 @@
|
|||
# 默认忽略的文件
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
# 基于编辑器的 HTTP 客户端请求
|
||||
/httpRequests/
|
||||
# Datasource local storage ignored files
|
||||
/dataSources/
|
||||
/dataSources.local.xml
|
||||
|
|
@ -0,0 +1 @@
|
|||
Judger.jar
|
||||
|
|
@ -10,9 +10,12 @@
|
|||
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
||||
<option name="LAST_RESOLUTION" value="IGNORE" />
|
||||
</component>
|
||||
<component name="ProjectColorInfo"><![CDATA[{
|
||||
"associatedIndex": 6
|
||||
}]]></component>
|
||||
<component name="ComposerSettings">
|
||||
<execution />
|
||||
</component>
|
||||
<component name="ProjectColorInfo">{
|
||||
"associatedIndex": 6
|
||||
}</component>
|
||||
<component name="ProjectId" id="2aiWf7bW87V3mbwTY6CfqHLJiX4" />
|
||||
<component name="ProjectViewState">
|
||||
<option name="hideEmptyMiddlePackages" value="true" />
|
||||
|
|
@ -23,11 +26,13 @@
|
|||
"RunOnceActivity.OpenProjectViewOnStart": "true",
|
||||
"RunOnceActivity.ShowReadmeOnStart": "true",
|
||||
"WebServerToolWindowFactoryState": "false",
|
||||
"last_opened_file_path": "D:/OJ",
|
||||
"kotlin-language-version-configured": "true",
|
||||
"last_opened_file_path": "D:/dhu/3B/软件架构设计/实验/实验 4 设计模式/必考/Adapter",
|
||||
"node.js.detected.package.eslint": "true",
|
||||
"node.js.detected.package.tslint": "true",
|
||||
"node.js.selected.package.eslint": "(autodetect)",
|
||||
"node.js.selected.package.tslint": "(autodetect)",
|
||||
"nodejs_package_manager_path": "npm",
|
||||
"settings.editor.selected.configurable": "vcs.Subversion",
|
||||
"spring.configuration.checksum": "d41d8cd98f00b204e9800998ecf8427e",
|
||||
"vue.rearranger.settings.migration": "true"
|
||||
|
|
@ -53,6 +58,14 @@
|
|||
</list>
|
||||
</recent_temporary>
|
||||
</component>
|
||||
<component name="SharedIndexes">
|
||||
<attachedChunks>
|
||||
<set>
|
||||
<option value="bundled-jdk-9823dce3aa75-28b599e66164-intellij.indexing.shared.core-IU-242.23339.11" />
|
||||
<option value="bundled-js-predefined-d6986cc7102b-5c90d61e3bab-JavaScript-IU-242.23339.11" />
|
||||
</set>
|
||||
</attachedChunks>
|
||||
</component>
|
||||
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="应用程序级" UseSingleDictionary="true" transferred="true" />
|
||||
<component name="SvnConfiguration" cleanupOnStartRun="true">
|
||||
<configuration>C:\Users\32592\AppData\Roaming\Subversion</configuration>
|
||||
|
|
@ -66,6 +79,9 @@
|
|||
<option name="presentableId" value="Default" />
|
||||
<updated>1704801979303</updated>
|
||||
<workItem from="1704801980316" duration="598000" />
|
||||
<workItem from="1719379629921" duration="24000" />
|
||||
<workItem from="1742820783863" duration="109000" />
|
||||
<workItem from="1743039478282" duration="37000" />
|
||||
</task>
|
||||
<servers />
|
||||
</component>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,17 @@
|
|||
{
|
||||
// 使用 IntelliSense 了解相关属性。
|
||||
// 悬停以查看现有属性的描述。
|
||||
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"type": "node",
|
||||
"request": "launch",
|
||||
"name": "启动程序",
|
||||
"skipFiles": [
|
||||
"<node_internals>/**"
|
||||
],
|
||||
"program": "${workspaceFolder}\\client\\src\\web\\test.js"
|
||||
}
|
||||
]
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -0,0 +1,10 @@
|
|||
2024-04-30 21:19:22[INFO]Log message 0
|
||||
2024-04-30 21:19:22[INFO]Log message 1
|
||||
2024-04-30 21:19:22[INFO]Log message 2
|
||||
2024-04-30 21:19:22[INFO]Log message 3
|
||||
2024-04-30 21:19:22[INFO]Log message 4
|
||||
2024-04-30 21:19:22[INFO]Log message 5
|
||||
2024-04-30 21:19:22[INFO]Log message 6
|
||||
2024-04-30 21:19:22[INFO]Log message 7
|
||||
2024-04-30 21:19:22[INFO]Log message 8
|
||||
2024-04-30 21:19:22[INFO]Log message 9
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
2024-04-30 21:09:04[INFO]Log message 0
|
||||
2024-04-30 21:09:09[INFO]Log message 1
|
||||
2024-04-30 21:09:14[INFO]Log message 2
|
||||
2024-04-30 21:09:19[INFO]Log message 3
|
||||
2024-04-30 21:09:24[INFO]Log message 4
|
||||
2024-04-30 21:09:29[INFO]Log message 5
|
||||
2024-04-30 21:09:34[INFO]Log message 6
|
||||
2024-04-30 21:09:39[INFO]Log message 7
|
||||
2024-04-30 21:09:44[INFO]Log message 8
|
||||
2024-04-30 21:09:49[INFO]Log message 9
|
||||
2024-04-30 21:11:19[INFO]Log message 0
|
||||
2024-04-30 21:11:26[INFO]Log message 1
|
||||
2024-04-30 21:11:38[INFO]Log message 0
|
||||
2024-04-30 21:11:38[INFO]Log message 1
|
||||
2024-04-30 21:11:38[INFO]Log message 2
|
||||
2024-04-30 21:11:38[INFO]Log message 3
|
||||
2024-04-30 21:11:38[INFO]Log message 4
|
||||
2024-04-30 21:11:38[INFO]Log message 5
|
||||
2024-04-30 21:11:38[INFO]Log message 6
|
||||
2024-04-30 21:11:38[INFO]Log message 7
|
||||
2024-04-30 21:11:38[INFO]Log message 8
|
||||
2024-04-30 21:11:38[INFO]Log message 9
|
||||
2024-04-30 21:13:00[INFO]Log message 0
|
||||
2024-04-30 21:13:00[INFO]Log message 1
|
||||
2024-04-30 21:13:00[INFO]Log message 2
|
||||
2024-04-30 21:13:00[INFO]Log message 3
|
||||
2024-04-30 21:13:00[INFO]Log message 4
|
||||
2024-04-30 21:13:00[INFO]Log message 5
|
||||
2024-04-30 21:13:00[INFO]Log message 6
|
||||
2024-04-30 21:13:00[INFO]Log message 7
|
||||
2024-04-30 21:13:00[INFO]Log message 8
|
||||
2024-04-30 21:13:00[INFO]Log message 9
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -1,8 +1,8 @@
|
|||
build.xml.data.CRC32=e5eafc6d
|
||||
build.xml.script.CRC32=35a5ea50
|
||||
build.xml.stylesheet.CRC32=8064a381@1.79.1.48
|
||||
build.xml.stylesheet.CRC32=f85dc8f2@1.113.0.48
|
||||
# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
|
||||
# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
|
||||
nbproject/build-impl.xml.data.CRC32=e5eafc6d
|
||||
nbproject/build-impl.xml.script.CRC32=f31ce408
|
||||
nbproject/build-impl.xml.stylesheet.CRC32=830a3534@1.80.1.48
|
||||
nbproject/build-impl.xml.script.CRC32=6e6b0703
|
||||
nbproject/build-impl.xml.stylesheet.CRC32=12e0a6c2@1.113.0.48
|
||||
|
|
|
|||
|
|
@ -3,12 +3,6 @@
|
|||
<editor-bookmarks xmlns="http://www.netbeans.org/ns/editor-bookmarks/2" lastBookmarkId="0"/>
|
||||
<open-files xmlns="http://www.netbeans.org/ns/projectui-open-files/2">
|
||||
<group name="最新版本代码"/>
|
||||
<group>
|
||||
<file>file:/K:/OJ/Common/test/common/LangSelectorTest.java</file>
|
||||
<file>file:/K:/OJ/Common/src/common/Const.java</file>
|
||||
<file>file:/K:/OJ/Common/src/common/Config.java</file>
|
||||
<file>file:/K:/OJ/Common/src/common/FileFinder.java</file>
|
||||
<file>file:/K:/OJ/Common/src/common/LangSelector.java</file>
|
||||
</group>
|
||||
<group/>
|
||||
</open-files>
|
||||
</project-private>
|
||||
|
|
|
|||
|
|
@ -19,8 +19,12 @@ build.test.results.dir=${build.dir}/test/results
|
|||
#debug.transport=dt_socket
|
||||
debug.classpath=\
|
||||
${run.classpath}
|
||||
debug.modulepath=\
|
||||
${run.modulepath}
|
||||
debug.test.classpath=\
|
||||
${run.test.classpath}
|
||||
debug.test.modulepath=\
|
||||
${run.test.modulepath}
|
||||
# build.classes.dir \u4e2d\u5e94\u4ece\u5206\u53d1 jar \u4e2d\u6392\u9664\u7684\u6587\u4ef6
|
||||
dist.archive.excludes=
|
||||
# This directory is removed when the project is cleaned:
|
||||
|
|
@ -58,6 +62,8 @@ javac.classpath=\
|
|||
javac.compilerargs=
|
||||
javac.deprecation=false
|
||||
javac.external.vm=false
|
||||
javac.modulepath=
|
||||
javac.processormodulepath=
|
||||
javac.processorpath=\
|
||||
${javac.classpath}
|
||||
javac.source=1.8
|
||||
|
|
@ -65,6 +71,8 @@ javac.target=1.8
|
|||
javac.test.classpath=\
|
||||
${javac.classpath}:\
|
||||
${build.classes.dir}
|
||||
javac.test.modulepath=\
|
||||
${javac.modulepath}
|
||||
javac.test.processorpath=\
|
||||
${javac.test.classpath}
|
||||
javadoc.additionalparam=
|
||||
|
|
@ -78,7 +86,7 @@ javadoc.splitindex=true
|
|||
javadoc.use=true
|
||||
javadoc.version=false
|
||||
javadoc.windowtitle=
|
||||
main.class=common.DBConfig
|
||||
main.class=common.LangSelector
|
||||
meta.inf.dir=${src.dir}/META-INF
|
||||
mkdist.disabled=true
|
||||
platform.active=default_platform
|
||||
|
|
@ -89,9 +97,13 @@ run.classpath=\
|
|||
# You may also define separate properties like run-sys-prop.name=value instead of -Dname=value.
|
||||
# To set system properties for unit tests define test-sys-prop.name=value:
|
||||
run.jvmargs=
|
||||
run.modulepath=\
|
||||
${javac.modulepath}
|
||||
run.test.classpath=\
|
||||
${javac.test.classpath}:\
|
||||
${build.test.classes.dir}
|
||||
run.test.modulepath=\
|
||||
${javac.test.modulepath}
|
||||
source.encoding=UTF-8
|
||||
src.dir=src
|
||||
test.src.dir=test
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ import java.util.List;
|
|||
import java.util.Map.Entry;
|
||||
import java.util.Properties;
|
||||
import log.Log;
|
||||
|
||||
import java.nio.file.Paths;
|
||||
public class Config {
|
||||
|
||||
public static int DEBUG;
|
||||
|
|
@ -100,7 +100,12 @@ public class Config {
|
|||
|
||||
//临时代码输出路径 若要改回配置文件读取 从const里获取字段
|
||||
public static String getSourcePath() {
|
||||
return "./test"; //
|
||||
String curDir = Paths.get(".").toAbsolutePath().normalize().toString();
|
||||
return curDir+"/test";
|
||||
}
|
||||
public static String getLogPath(){
|
||||
String curDir = Paths.get(".").toAbsolutePath().normalize().toString();
|
||||
return curDir+"/log";
|
||||
}
|
||||
//临时代码输出路径
|
||||
|
||||
|
|
@ -108,30 +113,62 @@ public class Config {
|
|||
// if (isTestRelative) {
|
||||
// return System.getProperty("user.dir") + prop.getProperty("relativeExeDir");
|
||||
// } else {
|
||||
return "./test";
|
||||
String curDir = Paths.get(".").toAbsolutePath().normalize().toString();
|
||||
return curDir+"/test";
|
||||
//}
|
||||
|
||||
}
|
||||
|
||||
public static String getCompilerDir(String language) {
|
||||
public static String getCompilerDir(String language,String compiler) {
|
||||
String dir = null;
|
||||
if (language.equals("c") || language.equals("cpp") || language.equals("c++")) {
|
||||
dir = prop.getProperty(Const.MinGWDir);
|
||||
} else if (language.equals("java")) {
|
||||
dir = prop.getProperty(Const.JavaCompilerDir);
|
||||
}
|
||||
//todo
|
||||
dir=LangSelector.getCompilerPath(language,compiler);
|
||||
//if (language.equals("c") || language.equals("cpp") || language.equals("c++")) {
|
||||
// dir=LangSelector.getCompilerPath("C++", compiler);
|
||||
//dir = prop.getProperty(Const.MinGWDir);
|
||||
//} else if (language.equals("java")) {
|
||||
// dir=LangSelector.getCompilerPath("Java", compiler);
|
||||
//dir = prop.getProperty(Const.JavaCompilerDir);
|
||||
//}
|
||||
return dir;
|
||||
}
|
||||
|
||||
public static String CompilerDir(String language) {
|
||||
//public static String getCompilerDir(String language) {
|
||||
// String dir = null;
|
||||
//todo
|
||||
// if (language.equals("c") || language.equals("cpp") || language.equals("c++")) {
|
||||
// dir=LangSelector.getCompilerPath("C++", null);
|
||||
// //dir = prop.getProperty(Const.MinGWDir);
|
||||
// } else if (language.equals("java")) {
|
||||
// dir=LangSelector.getCompilerPath("Java", null);
|
||||
// //dir = prop.getProperty(Const.JavaCompilerDir);
|
||||
// }
|
||||
// return dir;
|
||||
// }
|
||||
public static String CompilerDir(String language,String compiler) {
|
||||
String dir = null;
|
||||
|
||||
if (language.equals("c") || language.equals("cpp") || language.equals("c++")) //返回各种语言的编译器地址
|
||||
{
|
||||
dir = System.getProperty("user.dir") + Const.MinGWDir;
|
||||
//dir = System.getProperty("user.dir") + Const.MinGWDir;
|
||||
dir=LangSelector.getCompilerPath("C++",compiler);
|
||||
} else if (language.equals("java")) {
|
||||
dir = System.getProperty("user.dir") + Const.JavaCompilerDir;
|
||||
//dir = System.getProperty("user.dir") + Const.JavaCompilerDir;
|
||||
dir=LangSelector.getCompilerPath("Java",compiler);
|
||||
}
|
||||
return dir;
|
||||
}
|
||||
// public static String CompilerDir(String language) {
|
||||
// String dir = null;
|
||||
//
|
||||
// if (language.equals("c") || language.equals("cpp") || language.equals("c++")) //返回各种语言的编译器地址
|
||||
// {
|
||||
// //dir = System.getProperty("user.dir") + Const.MinGWDir;
|
||||
// dir = LangSelector.getCompilerPath("C++", compiler);
|
||||
// } else if (language.equals("java")) {
|
||||
// //dir = System.getProperty("user.dir") + Const.JavaCompilerDir;
|
||||
// dir = LangSelector.getCompilerPath("Java", null);
|
||||
// }
|
||||
// return dir;
|
||||
// }
|
||||
}
|
||||
|
|
@ -37,6 +37,8 @@ public class Const {
|
|||
return ".cpp";
|
||||
} else if (language.equals("java")) {
|
||||
return ".java";
|
||||
}else if(language.equals("python")){
|
||||
return ".py";
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -70,12 +70,12 @@ private final static String FileName="DBConfig.properties";
|
|||
public static void setPassword(String Password) {
|
||||
dbConfig.setProperty("hibernate.connection.password", Password);
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
System.out.println(DBConfig.getUserName());
|
||||
System.out.println(DBConfig.getPassword());
|
||||
System.out.println(DBConfig.getIp());
|
||||
}
|
||||
//
|
||||
// public static void main(String[] args) {
|
||||
// System.out.println(DBConfig.getUserName());
|
||||
// System.out.println(DBConfig.getPassword());
|
||||
// System.out.println(DBConfig.getIp());
|
||||
// }
|
||||
|
||||
public static void writeToFile(){
|
||||
try {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,34 @@
|
|||
/*
|
||||
* To change this license header, choose License Headers in Project Properties.
|
||||
* To change this template file, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
package common;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author tange
|
||||
*/
|
||||
public class EscapeXml {
|
||||
// 手动转义特殊字符为 XML 实体
|
||||
public static String escapeXml(String input) {
|
||||
if(input.length()>1000)
|
||||
input=input.substring(0,1000);
|
||||
StringBuilder builder = new StringBuilder();
|
||||
for (char c : input.toCharArray()) {
|
||||
switch (c) {
|
||||
case '<':
|
||||
builder.append("<");
|
||||
break;
|
||||
case '>':
|
||||
builder.append(">");
|
||||
break;
|
||||
|
||||
default:
|
||||
builder.append(c);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return builder.toString();
|
||||
}
|
||||
}
|
||||
|
|
@ -1,35 +1,143 @@
|
|||
package common;
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import javax.xml.parsers.DocumentBuilder;
|
||||
import javax.xml.parsers.DocumentBuilderFactory;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import javax.swing.JOptionPane;
|
||||
import javax.xml.transform.Transformer;
|
||||
import javax.xml.transform.TransformerFactory;
|
||||
import javax.xml.transform.dom.DOMSource;
|
||||
import javax.xml.transform.stream.StreamResult;
|
||||
|
||||
import javax.xml.xpath.XPath;
|
||||
import javax.xml.xpath.XPathConstants;
|
||||
import javax.xml.xpath.XPathExpression;
|
||||
import javax.xml.xpath.XPathExpressionException;
|
||||
import javax.xml.xpath.XPathFactory;
|
||||
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Element;
|
||||
import org.w3c.dom.Node;
|
||||
import org.w3c.dom.NodeList;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Jared Ye
|
||||
*/
|
||||
public abstract class LangSelector {
|
||||
|
||||
private static String ConfigPath="";
|
||||
private static Document Data;
|
||||
public static boolean Loaded=false;
|
||||
|
||||
private static String lastLanguage; // 最后使用的语言
|
||||
private static XPath xpath = XPathFactory.newInstance().newXPath();
|
||||
static {
|
||||
try {
|
||||
ConfigPath=findConfigFilePath();
|
||||
Data = init(ConfigPath);
|
||||
customDefaultCompiler=new HashMap<>();
|
||||
init();
|
||||
Loaded=true;
|
||||
} catch (Exception e) {
|
||||
//初始化的时候没有读到config.xml
|
||||
}
|
||||
}
|
||||
//
|
||||
private static Map<String,String>customDefaultCompiler;
|
||||
|
||||
// by san_san
|
||||
public static String getDefaultCompiler(String language) {
|
||||
try {
|
||||
String xpathExpr = String.format("/languages/language[@id='%s']/lastCompiler", language);
|
||||
|
||||
|
||||
Node lastCompilerNode = (Node) xpath.evaluate(xpathExpr, Data, XPathConstants.NODE);
|
||||
|
||||
if (lastCompilerNode != null) {
|
||||
return lastCompilerNode.getTextContent();
|
||||
}
|
||||
} catch (XPathExpressionException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return customDefaultCompiler.get(language);
|
||||
}
|
||||
|
||||
public static void setDefaultCompiler(String language,String compiler) {
|
||||
customDefaultCompiler.put(language, compiler);
|
||||
try {
|
||||
// 更新 XML 中的 lastCompiler 节点
|
||||
String xpathExpr = String.format("/languages/language[@id='%s']", language);
|
||||
Node languageNode = (Node) xpath.evaluate(xpathExpr, Data, XPathConstants.NODE);
|
||||
|
||||
if (languageNode != null) {
|
||||
Element languageElement = (Element) languageNode;
|
||||
Node lastCompilerNode = (Node) xpath.evaluate("lastCompiler", languageElement, XPathConstants.NODE);
|
||||
|
||||
if (lastCompilerNode == null) {
|
||||
// 如果 lastCompiler 节点不存在,创建它
|
||||
lastCompilerNode = Data.createElement("lastCompiler");
|
||||
languageElement.appendChild(lastCompilerNode);
|
||||
}
|
||||
|
||||
lastCompilerNode.setTextContent(compiler);
|
||||
}
|
||||
} catch (XPathExpressionException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
//
|
||||
|
||||
// by san_san
|
||||
// 获取最后使用的语言
|
||||
public static String getLastLanguage() {
|
||||
try {
|
||||
String xpathExpr = "/languages/lastLanguage";
|
||||
Node lastLanguageNode = (Node) xpath.evaluate(xpathExpr, Data, XPathConstants.NODE);
|
||||
|
||||
if (lastLanguageNode != null) {
|
||||
return lastLanguageNode.getTextContent();
|
||||
}
|
||||
} catch (XPathExpressionException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
// 设置最后使用的语言
|
||||
public static void setLastLanguage(String language) {
|
||||
try {
|
||||
// 标准化语言名称
|
||||
String standardLanguage = parseStandardLanguageName(language);
|
||||
|
||||
// 查找现有的 lastLanguage 节点
|
||||
String xpathExpr = "/languages/lastLanguage";
|
||||
Node lastLanguageNode = (Node) xpath.evaluate(xpathExpr, Data, XPathConstants.NODE);
|
||||
|
||||
if (lastLanguageNode != null) {
|
||||
// 如果节点存在,更新内容
|
||||
lastLanguageNode.setTextContent(standardLanguage);
|
||||
} else {
|
||||
// 如果节点不存在,创建新节点
|
||||
Element root = Data.getDocumentElement();
|
||||
Element newLastLanguage = Data.createElement("lastLanguage");
|
||||
newLastLanguage.setTextContent(standardLanguage);
|
||||
root.appendChild(newLastLanguage);
|
||||
}
|
||||
|
||||
// 更新内存中的值
|
||||
lastLanguage = standardLanguage;
|
||||
|
||||
// 保存到文件
|
||||
save(ConfigPath);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
private static String findConfigFilePath() {
|
||||
String currentPath = System.getProperty("user.dir");
|
||||
String configFile = "config.xml";
|
||||
|
|
@ -63,8 +171,163 @@ public abstract class LangSelector {
|
|||
public static String getConfigPath(){
|
||||
return ConfigPath;
|
||||
}
|
||||
|
||||
/////////////////////////////////新增的逻辑
|
||||
public static void save(String filePath) throws Exception {
|
||||
Document doc = Data;
|
||||
// 创建TransformerFactory实例
|
||||
TransformerFactory transformerFactory = TransformerFactory.newInstance();
|
||||
Transformer transformer = transformerFactory.newTransformer();
|
||||
|
||||
// 将Document转换为DOMSource
|
||||
DOMSource source = new DOMSource(doc);
|
||||
|
||||
// 创建StreamResult以保存到文件
|
||||
StreamResult result = new StreamResult(new File(filePath));
|
||||
|
||||
// 执行转换并写入文件
|
||||
transformer.transform(source, result);
|
||||
|
||||
System.out.println("XML 文件保存成功: " + filePath);
|
||||
}
|
||||
public static boolean setCompilerPath(String languageName, String compilerName, String newPath) {
|
||||
languageName = parseStandardLanguageName(languageName);
|
||||
if (compilerName == null || compilerName.trim().equals("")) {
|
||||
compilerName = getDefaultCompilerName(languageName);
|
||||
}
|
||||
|
||||
try {
|
||||
// 定义XPath表达式来找到对应的编译器path节点
|
||||
String exp = "/languages/language" + "[@id='" + languageName + "']" + "//compiler[@name='" + compilerName + "']//path";
|
||||
|
||||
// 使用XPath查找对应节点
|
||||
Node pathNode = (Node) xpath.evaluate(exp, Data, XPathConstants.NODE);
|
||||
|
||||
// 检查path节点是否存在
|
||||
if (pathNode != null) {
|
||||
// 设置新路径
|
||||
pathNode.setTextContent(newPath);
|
||||
return true; // 返回true表示设置成功
|
||||
} else {
|
||||
System.out.println("找不到指定的编译器路径节点");
|
||||
return false;
|
||||
}
|
||||
} catch (XPathExpressionException e) {
|
||||
System.out.println(e.getMessage());
|
||||
return false;
|
||||
}
|
||||
}
|
||||
public static void setCompileCommand(String languageName, String compilerName, String compileCommand) {
|
||||
Document doc=Data;
|
||||
languageName = parseStandardLanguageName(languageName);
|
||||
if (compilerName == null || compilerName.trim().equals("")) {
|
||||
compilerName = getDefaultCompilerName(languageName);
|
||||
}
|
||||
|
||||
try {
|
||||
String exp = "/languages/language[@id='" + languageName + "']//compiler[@name='" + compilerName + "']//compileCmd";
|
||||
|
||||
// 获取节点
|
||||
Node compileCmdNode = (Node) xpath.evaluate(exp, Data, XPathConstants.NODE);
|
||||
if (compileCmdNode != null) {
|
||||
compileCmdNode.setTextContent(compileCommand);
|
||||
} else {
|
||||
// 创建新节点逻辑
|
||||
// 这里的实现取决于你的 XML 结构,假设我们有 Document 对象 doc
|
||||
Element newCompilerElement = doc.createElement("compiler");
|
||||
newCompilerElement.setAttribute("name", compilerName);
|
||||
Element newCompileCmdElement = doc.createElement("compileCmd");
|
||||
newCompileCmdElement.setTextContent(compileCommand);
|
||||
newCompilerElement.appendChild(newCompileCmdElement);
|
||||
|
||||
// 假设你有一个表示语言的节点
|
||||
Node languageNode = (Node) xpath.evaluate("/languages/language[@id='" + languageName + "']", Data, XPathConstants.NODE);
|
||||
if (languageNode != null) {
|
||||
languageNode.appendChild(newCompilerElement);
|
||||
}
|
||||
}
|
||||
} catch (XPathExpressionException e) {
|
||||
System.out.println(e.getMessage());
|
||||
}
|
||||
}
|
||||
//////////////////////
|
||||
public static void setLinkCommand(String languageName, String compilerName, String linkCommand) {
|
||||
Document doc = Data;
|
||||
languageName = parseStandardLanguageName(languageName);
|
||||
if (compilerName == null || compilerName.trim().equals("")) {
|
||||
compilerName = getDefaultCompilerName(languageName);
|
||||
}
|
||||
|
||||
try {
|
||||
String exp = "/languages/language[@id='" + languageName + "']//compiler[@name='" + compilerName + "']//linkCmd";
|
||||
|
||||
// 获取节点
|
||||
Node compileCmdNode = (Node) xpath.evaluate(exp, Data, XPathConstants.NODE);
|
||||
if (compileCmdNode != null) {
|
||||
compileCmdNode.setTextContent(linkCommand);
|
||||
} else {
|
||||
// 创建新节点逻辑
|
||||
// 这里的实现取决于你的 XML 结构,假设我们有 Document 对象 doc
|
||||
Element newCompilerElement = doc.createElement("compiler");
|
||||
newCompilerElement.setAttribute("name", compilerName);
|
||||
Element newCompileCmdElement = doc.createElement("linkCmd");
|
||||
newCompileCmdElement.setTextContent(linkCommand);
|
||||
newCompilerElement.appendChild(newCompileCmdElement);
|
||||
|
||||
// 假设你有一个表示语言的节点
|
||||
Node languageNode = (Node) xpath.evaluate("/languages/language[@id='" + languageName + "']", Data, XPathConstants.NODE);
|
||||
if (languageNode != null) {
|
||||
languageNode.appendChild(newCompilerElement);
|
||||
}
|
||||
}
|
||||
} catch (XPathExpressionException e) {
|
||||
System.out.println(e.getMessage());
|
||||
}
|
||||
}
|
||||
public static String parseStandardLanguageName(String languageName) {
|
||||
try {
|
||||
|
||||
|
||||
// 创建 XPath 对象
|
||||
XPath xpath = XPathFactory.newInstance().newXPath();
|
||||
|
||||
// 编译 XPath 表达式
|
||||
XPathExpression expr = xpath.compile("//language");
|
||||
|
||||
// 评估 XPath 表达式
|
||||
Object result = expr.evaluate(Data, XPathConstants.NODESET);
|
||||
NodeList nodes = (NodeList) result;
|
||||
|
||||
// 遍历每个语言节点
|
||||
for (int i = 0; i < nodes.getLength(); i++) {
|
||||
String id = nodes.item(i).getAttributes().getNamedItem("id").getNodeValue();
|
||||
String aliasString = nodes.item(i).getAttributes().getNamedItem("alias").getNodeValue();
|
||||
String[] aliases = aliasString.split(",");
|
||||
|
||||
// 检查 languageName 是否与 ID 匹配
|
||||
if (id.equalsIgnoreCase(languageName)) {
|
||||
return id;
|
||||
}
|
||||
|
||||
// 检查 languageName 是否与别名匹配
|
||||
for (String alias : aliases) {
|
||||
if (alias.equalsIgnoreCase(languageName)) {
|
||||
return id;
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
// 如果没有匹配项,则返回原始 languageName
|
||||
return languageName;
|
||||
}
|
||||
public static String getDefaultCompilerName(String languageName){
|
||||
languageName=parseStandardLanguageName(languageName);
|
||||
if(customDefaultCompiler.containsKey(languageName))
|
||||
{
|
||||
return customDefaultCompiler.get(languageName);
|
||||
}
|
||||
|
||||
//if(languageName.charAt(0)>='a')languageName
|
||||
try{
|
||||
String exp="/languages/language"+ "[@id='" +languageName+ "']"+"/compiler[1]/@name";
|
||||
|
|
@ -78,30 +341,98 @@ public abstract class LangSelector {
|
|||
|
||||
|
||||
|
||||
public static Document init(String ConfigPath) throws Exception {
|
||||
public static Document init() throws Exception {
|
||||
// 创建Document对象
|
||||
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
|
||||
dbf.setValidating(false);
|
||||
DocumentBuilder db = dbf.newDocumentBuilder();
|
||||
// 创建XPath对象
|
||||
LangSelector.ConfigPath =ConfigPath;
|
||||
LangSelector.ConfigPath =findConfigFilePath();
|
||||
//JOptionPane.showMessageDialog(null,"当前工作目录:"+ConfigPath);
|
||||
// LangSelector.ConfigPath=new File(LangSelector.ConfigPath).getAbsolutePath();
|
||||
return db.parse(LangSelector.ConfigPath);
|
||||
Document doc=db.parse(new File(LangSelector.ConfigPath));
|
||||
Data=doc;
|
||||
|
||||
// 加载默认编译器设置 by san_san
|
||||
NodeList languageNodes = (NodeList) xpath.evaluate("/languages/language", doc, XPathConstants.NODESET);
|
||||
for (int i = 0; i < languageNodes.getLength(); i++) {
|
||||
Element languageElement = (Element) languageNodes.item(i);
|
||||
String languageId = languageElement.getAttribute("id");
|
||||
|
||||
Node lastCompilerNode = (Node) xpath.evaluate("lastCompiler", languageElement, XPathConstants.NODE);
|
||||
if (lastCompilerNode != null) {
|
||||
customDefaultCompiler.put(languageId, lastCompilerNode.getTextContent());
|
||||
} else {
|
||||
// 如果 lastCompiler 不存在,使用第一个编译器作为默认
|
||||
NodeList compilerNodes = languageElement.getElementsByTagName("compiler");
|
||||
if (compilerNodes.getLength() > 0) {
|
||||
Element defaultCompiler = (Element) compilerNodes.item(0);
|
||||
customDefaultCompiler.put(languageId, defaultCompiler.getAttribute("name"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 初始化 lastLanguage
|
||||
Node lastLanguageNode = (Node) xpath.evaluate("/languages/lastLanguage", doc, XPathConstants.NODE);
|
||||
if (lastLanguageNode != null) {
|
||||
lastLanguage = lastLanguageNode.getTextContent();
|
||||
} else {
|
||||
// 如果不存在,创建节点并设置默认值为第一个可用的语言
|
||||
languageNodes = (NodeList) xpath.evaluate("/languages/language", doc, XPathConstants.NODESET);
|
||||
if (languageNodes.getLength() > 0) {
|
||||
Element firstLanguage = (Element) languageNodes.item(0);
|
||||
lastLanguage = firstLanguage.getAttribute("id");
|
||||
|
||||
Element root = doc.getDocumentElement();
|
||||
Element lastLanguageElement = doc.createElement("lastLanguage");
|
||||
lastLanguageElement.setTextContent(lastLanguage);
|
||||
root.appendChild(lastLanguageElement);
|
||||
}
|
||||
}
|
||||
|
||||
return doc;
|
||||
}
|
||||
|
||||
// 获取语言ID的辅助方法
|
||||
public static String getLanguageIdFromAlias(String alias) {
|
||||
return parseStandardLanguageName(alias);
|
||||
}
|
||||
public static List<String> getCompilerNames(String languageName){
|
||||
languageName=parseStandardLanguageName(languageName);
|
||||
|
||||
ArrayList<String>arrayListStr=new ArrayList<>();
|
||||
try {
|
||||
String exp="/languages/language"+ "[@id='" +languageName+ "']"+"//compiler";
|
||||
NodeList nodeList = (NodeList) xpath.evaluate(exp,Data,XPathConstants.NODESET);
|
||||
|
||||
for (int i = 0; i < nodeList.getLength(); i++) {
|
||||
Node childNode = nodeList.item(i);
|
||||
arrayListStr.add(childNode.getAttributes().getNamedItem("name").getTextContent());
|
||||
// 如果需要获取属性值,可以使用 childNode.getAttributes().getNamedItem("attributeName").getTextContent()
|
||||
}
|
||||
return arrayListStr;
|
||||
|
||||
} catch (XPathExpressionException ex) {
|
||||
Logger.getLogger(LangSelector.class.getName()).log(Level.SEVERE, null, ex);
|
||||
return arrayListStr;
|
||||
}
|
||||
}
|
||||
|
||||
public static String getCompilerPath(String languageName,String compilerName) {
|
||||
if(compilerName==null)compilerName=getDefaultCompilerName(languageName);
|
||||
languageName=parseStandardLanguageName(languageName);
|
||||
if(compilerName==null||compilerName.equals(""))compilerName=getDefaultCompilerName(languageName);
|
||||
try{
|
||||
String exp="/languages/language"+ "[@id='" +languageName+ "']"+"//compiler[@name='"+compilerName+"']//path/text()";
|
||||
return (String) xpath.evaluate(exp,Data);
|
||||
} catch (XPathExpressionException e) {
|
||||
System.out.println("null!");
|
||||
|
||||
System.out.println(e.getMessage());
|
||||
return null;
|
||||
}
|
||||
}
|
||||
public static String getCompileCommand(String languageName,String compilerName){
|
||||
languageName=parseStandardLanguageName(languageName);
|
||||
if(compilerName==null)compilerName=getDefaultCompilerName(languageName);
|
||||
try{
|
||||
String exp="/languages/language"+ "[@id='" +languageName+ "']"+"//compiler[@name='"+compilerName+"']//compileCmd/text()";
|
||||
|
|
@ -112,7 +443,8 @@ public abstract class LangSelector {
|
|||
}
|
||||
}
|
||||
public static String getLinkCommand(String languageName,String compilerName){
|
||||
if(compilerName==null)compilerName=getDefaultCompilerName(languageName);
|
||||
languageName=parseStandardLanguageName(languageName);
|
||||
if(compilerName==null||compilerName.equals(""))compilerName=getDefaultCompilerName(languageName);
|
||||
try{
|
||||
String exp="/languages/language"+ "[@id='" +languageName+ "']"+"//compiler[@name='"+compilerName+"']//linkCmd/text()";
|
||||
return (String) xpath.evaluate(exp,Data);
|
||||
|
|
@ -122,7 +454,8 @@ public abstract class LangSelector {
|
|||
}
|
||||
}
|
||||
public static String getRunCommand(String languageName,String compilerName){
|
||||
if(compilerName==null)compilerName=getDefaultCompilerName(languageName);
|
||||
languageName=parseStandardLanguageName(languageName);
|
||||
if(compilerName==null||compilerName.equals(""))compilerName=getDefaultCompilerName(languageName);
|
||||
try{
|
||||
String exp="/languages/language"+ "[@id='" +languageName+ "']"+"//compiler[@name='"+compilerName+"']//runCmd/text()";
|
||||
return (String) xpath.evaluate(exp,Data);
|
||||
|
|
@ -146,12 +479,12 @@ public abstract class LangSelector {
|
|||
}
|
||||
}
|
||||
public static String matchPlaceHolder(String src, HashMap<String,String>map){
|
||||
if(src==null||src.trim().isEmpty())return null;
|
||||
for (java.util.Map.Entry<String, String> Entry : map.entrySet()) {
|
||||
src = src.replace(Entry.getKey(), Entry.getValue());
|
||||
System.out.println(Entry.getKey() + "已替换:" + Entry.getValue());
|
||||
//System.out.println(Entry.getKey() + "已替换:" + Entry.getValue());
|
||||
}
|
||||
return src;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,20 @@
|
|||
/*
|
||||
* To change this license header, choose License Headers in Project Properties.
|
||||
* To change this template file, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
package common;
|
||||
|
||||
public enum LogLevel{
|
||||
INFO("INFO"),
|
||||
WARNING("WARNING"),
|
||||
ERROR("ERROR");
|
||||
|
||||
private final String info;
|
||||
private LogLevel(String info){
|
||||
this.info=info;
|
||||
}
|
||||
public String getString(){
|
||||
return info;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,89 @@
|
|||
/*
|
||||
* To change this license header, choose License Headers in Project Properties.
|
||||
* To change this template file, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
package common;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileWriter;
|
||||
import java.io.IOException;
|
||||
import java.io.PrintWriter;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
|
||||
public class Logger {
|
||||
private static Logger instance;
|
||||
private PrintWriter writer;
|
||||
private String logFileName;
|
||||
private static final String LOG_FILE_PREFIX = "log";
|
||||
private static final String LOG_FILE_SUFFIX = ".txt";
|
||||
private static final long HOUR_IN_MILLISECONDS = 3600000L; // 1 hour in milliseconds
|
||||
private static String Logdir = Config.getLogPath();
|
||||
private Logger() {
|
||||
createLogFile();
|
||||
startFileUpdateThread();
|
||||
}
|
||||
|
||||
public static synchronized Logger getInstance() {
|
||||
if (instance == null) {
|
||||
instance = new Logger();
|
||||
}
|
||||
return instance;
|
||||
}
|
||||
|
||||
private void createLogFile() {
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
logFileName = Logdir+File.separator+LOG_FILE_PREFIX + "_" + now.format(DateTimeFormatter.ofPattern("yyyyMMddHH")) + LOG_FILE_SUFFIX;
|
||||
System.out.println("日志文件"+logFileName+"已创建!");
|
||||
try {
|
||||
writer = new PrintWriter(new FileWriter(logFileName, true));
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
private void startFileUpdateThread() {
|
||||
Thread fileUpdateThread = new Thread(() -> {
|
||||
while (true) {
|
||||
try {
|
||||
Thread.sleep(HOUR_IN_MILLISECONDS);
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
updateLogFile();
|
||||
}
|
||||
});
|
||||
fileUpdateThread.setDaemon(true);
|
||||
fileUpdateThread.start();
|
||||
}
|
||||
|
||||
private void updateLogFile() {
|
||||
writer.close(); // Close the current log file
|
||||
createLogFile(); // Create a new log file
|
||||
}
|
||||
|
||||
public void log(String msg, LogLevel level) {
|
||||
String txt = getTimeStamp() + "[" + level.getString() + "]" + msg;
|
||||
System.out.println(txt);
|
||||
writer.println(txt);
|
||||
writer.flush();
|
||||
}
|
||||
private String getTimeStamp() {
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
return now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
Logger logger = Logger.getInstance();
|
||||
for (int i = 0; i < 10; i++) {
|
||||
logger.log("Log message " + i, LogLevel.INFO);
|
||||
try {
|
||||
Thread.sleep(50); // Sleep for 5 seconds
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,130 @@
|
|||
/*
|
||||
* To change this license header, choose License Headers in Project Properties.
|
||||
* To change this template file, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
package common;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author tange
|
||||
*/
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Scanner;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
public class VSWhereUtil {
|
||||
/**
|
||||
* 从指定的起始目录开始,逐层向上查找 vswhere.exe
|
||||
*
|
||||
* @param startDir 起始目录
|
||||
* @return vswhere.exe 的绝对路径
|
||||
* @throws RuntimeException 如果未找到 vswhere.exe
|
||||
*/
|
||||
private static String findVswhereExe(File startDir) {
|
||||
File currentDir = startDir;
|
||||
|
||||
while (currentDir != null) {
|
||||
File vswhereFile = new File(currentDir, "vswhere.exe");
|
||||
if (vswhereFile.exists() && vswhereFile.isFile()) {
|
||||
return vswhereFile.getAbsolutePath();
|
||||
}
|
||||
currentDir = currentDir.getParentFile(); // 向上一级目录
|
||||
}
|
||||
|
||||
throw new RuntimeException("未找到 vswhere.exe,请确保该文件存在于程序目录或上层目录中。");
|
||||
}
|
||||
private static String getVcvarsPath() throws IOException, InterruptedException {
|
||||
String vswhereDir=findVswhereExe(new File(System.getProperty("user.dir")));
|
||||
ProcessBuilder processBuilder = new ProcessBuilder(vswhereDir,
|
||||
"-latest",
|
||||
"-products", "*",
|
||||
"installationPath",
|
||||
"-find", "**/vcvars64.bat");
|
||||
processBuilder.redirectErrorStream(true); // 合并标准错误输出
|
||||
Process process = processBuilder.start();
|
||||
List<String> output = new ArrayList<>();
|
||||
try (Scanner scanner = new Scanner(process.getInputStream())) {
|
||||
while (scanner.hasNextLine()) {
|
||||
output.add(scanner.nextLine());
|
||||
}
|
||||
}
|
||||
process.waitFor();
|
||||
if (!output.isEmpty()) {
|
||||
return output.get(0);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public static String findClExePath() {
|
||||
// 获取当前工作目录
|
||||
File currentDir = new File(System.getProperty("user.dir"));
|
||||
// 查找 vswhere.exe 路径
|
||||
String vswherePath = findVswhereExe(currentDir);
|
||||
|
||||
String clExeDir = null;
|
||||
try {
|
||||
// 构建命令行调用 vswhere.exe
|
||||
ProcessBuilder processBuilder = new ProcessBuilder(vswherePath,
|
||||
"-latest",
|
||||
"-products", "*",
|
||||
"-requires", "Microsoft.VisualStudio.Component.VC.Tools.x86.x64",
|
||||
"-find", "**/Hostx64/x64/cl.exe");
|
||||
|
||||
// 设置工作目录为当前程序目录
|
||||
processBuilder.directory(new File(System.getProperty("user.dir")));
|
||||
|
||||
// 启动进程
|
||||
Process process = processBuilder.start();
|
||||
|
||||
// 读取命令行输出
|
||||
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
|
||||
String line;
|
||||
|
||||
while ((line = reader.readLine()) != null) {
|
||||
if (line.endsWith("cl.exe")) {
|
||||
clExeDir = line.substring(0, line.lastIndexOf("cl.exe"));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
reader.close();
|
||||
process.waitFor();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return clExeDir;
|
||||
}
|
||||
public static String getMsvcCompilerCommand(){
|
||||
try {
|
||||
return "cmd.exe /c call \""+getVcvarsPath()+"\" && \"$compilerPath$/cl.exe\" \"$sourceFile$\" /O2 /Fe:\"$exeFile$\"";
|
||||
} catch (IOException ex) {
|
||||
Logger.getLogger(VSWhereUtil.class.getName()).log(Level.SEVERE, null, ex);
|
||||
} catch (InterruptedException ex) {
|
||||
Logger.getLogger(VSWhereUtil.class.getName()).log(Level.SEVERE, null, ex);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
public static String getMsvcLinkCommand(){
|
||||
return "cmd.exe /c";
|
||||
}
|
||||
public static void main(String[] args) {
|
||||
String clPath = findClExePath();
|
||||
if (clPath != null) {
|
||||
System.out.println("cl.exe 目录路径: " + clPath);
|
||||
System.out.println(getMsvcCompilerCommand());
|
||||
|
||||
} else {
|
||||
System.out.println("未找到 cl.exe 路径");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -18,6 +18,9 @@ public class SolutionBean {
|
|||
Integer userId;
|
||||
Date submitTime;
|
||||
String language;
|
||||
//NEW
|
||||
String compiler;
|
||||
//
|
||||
String SourceCode;
|
||||
Integer codelength;
|
||||
String status;
|
||||
|
|
@ -27,6 +30,7 @@ public class SolutionBean {
|
|||
Float score;
|
||||
String remark;
|
||||
|
||||
|
||||
public SolutionBean() {
|
||||
this.id = 1;
|
||||
this.examId = 1;
|
||||
|
|
@ -34,6 +38,7 @@ public class SolutionBean {
|
|||
this.userId = 1;
|
||||
this.submitTime = new Date();
|
||||
this.language = "";
|
||||
this.compiler="";
|
||||
this.SourceCode = "";
|
||||
this.codelength = 3;
|
||||
this.status = "";
|
||||
|
|
@ -43,6 +48,13 @@ public class SolutionBean {
|
|||
this.score = 1f;
|
||||
this.remark = "";
|
||||
}
|
||||
|
||||
public void setCompiler(String compiler){
|
||||
this.compiler=compiler;
|
||||
}
|
||||
public String getCompiler(){
|
||||
return compiler;
|
||||
}
|
||||
|
||||
public Integer getId() {
|
||||
return id;
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -0,0 +1,82 @@
|
|||
package edu.dhu.ws;
|
||||
|
||||
public interface OJWS {
|
||||
|
||||
//测试
|
||||
public String test(String message);
|
||||
// 将登陆人的信息转换成xml格式
|
||||
public String wsLogin(String userName, String userPassword);
|
||||
|
||||
// 将考试列表转换成xml格式
|
||||
public String wsGetExamList(String userName, String password);
|
||||
|
||||
// 通过Id将考试列表转换成xml格式
|
||||
public String wsGetExamById(String userName, String password, int examId);
|
||||
|
||||
// 根据problemId查出problems和problemtestcases的相关信息转换成xml格式
|
||||
public byte[] wsGetProblem(String userName, String password,int examId, int problemId);
|
||||
|
||||
// 根据examId查出examProblems的相关信息转换成xml格式
|
||||
public String wsGetExamProblems(String userName, String password,
|
||||
int examId, int page, int rows);
|
||||
|
||||
// 根据用户名,密码,examId获取examdetail的相关信息转换成xml格式
|
||||
public String wsGetExamDetail(String userName, String password, int examId, int page, int rows);
|
||||
|
||||
// 根据用户提交的代码对WrongCases,Solution,Problems,StudentExamDetail的相关信息,返回solutionId
|
||||
public String wsSubmitCode(String userName, String password, String codeXml);
|
||||
|
||||
// 提交本题操作
|
||||
public String wsSubmitThisProblem(String userName, String password,
|
||||
String codeXml);
|
||||
|
||||
// 获取submittedcode的信息用来检查相似度
|
||||
public String wsSubmittedCode(String userName, String password,
|
||||
int problemId);
|
||||
|
||||
// 查看测试数据,获取wrongcases的信息
|
||||
public String wsViewWrongCase(String userName, String password,
|
||||
int examId, int problemId, int caseId, boolean caseInfo);
|
||||
|
||||
// 获取最新状态
|
||||
public String wsGetExamProblemStatus(String userName, String password,
|
||||
int examId, int problemId);
|
||||
|
||||
// 裁判机获取solution等信息
|
||||
public String wsGetSolutions(String account,String password,int number);
|
||||
|
||||
// 更新裁判后返回的结果
|
||||
public String wsUpdateResult(String userName, String password,byte[] result);
|
||||
|
||||
// 是否允许换座
|
||||
public String wsIsPermit(String userName, String password, int examId,
|
||||
String UUID);
|
||||
|
||||
// 裁判机获取题目信息
|
||||
public byte[] wsGetProblem4Judge(String userName, String password, int problemId);
|
||||
|
||||
|
||||
// 根据examId获取智能训练题目类别
|
||||
public String wsGetExamProCatagorys(String userName,String password,int examId);
|
||||
|
||||
//智能训练页面点击"开始做题"操作
|
||||
public String wsCanDoCategory(String userName, String password, int examId);
|
||||
|
||||
//智能训练页面点击"我要抽题"操作
|
||||
public byte[] wsDrawProblem(String userName, String password, int examId,int catId);
|
||||
|
||||
//智能训练模块做题记录页面数据
|
||||
public String wsSubmitHistory(String userName, String password, int examId);
|
||||
|
||||
//智能训练模块"提交代码"操作
|
||||
public String wsItrainSubmitCode(String userName, String password,int catId,String codeXml);
|
||||
|
||||
//智能训练模块"暂时跳过本题"操作
|
||||
public String wsSkipThisProblem(String userName, String password, int examId,int catId,int problemId);
|
||||
|
||||
//智能训练模块"提交本题"操作
|
||||
public String wsItrainSubmitThisProblem(String userName, String password,int catId,String codeXml,String continueTrain);
|
||||
|
||||
//智能训练模块"我要通关"操作
|
||||
public String wsPassThisCategory(String userName, String password, int examId,int catId);
|
||||
}
|
||||
|
|
@ -1,8 +1,8 @@
|
|||
#Sat, 13 Jan 2024 20:50:26 +0800
|
||||
#Thu, 18 Sep 2025 20:27:28 +0800
|
||||
|
||||
|
||||
K\:\\OJ\\JuderUI=
|
||||
D\:\\oj\\JuderUI=
|
||||
|
||||
K\:\\OJ\\Common=
|
||||
D\:\\oj\\Common=
|
||||
|
||||
K\:\\OJ\\Judger=
|
||||
D\:\\oj\\Judger=
|
||||
|
|
|
|||
|
|
@ -3,4 +3,6 @@
|
|||
<system systemId="http://47.95.22.126:8080/oj/webservice/OJWS?wsdl" uri="wsdl/47.95.22.126_8080/oj/webservice/OJWS.wsdl"/>
|
||||
<system systemId="http://127.0.0.1:8080/oj/webservice/OJWS?wsdl" uri="wsdl/127.0.0.1_8080/oj/webservice/OJWS.wsdl"/>
|
||||
<system systemId="http://106.15.36.190:80/oj/webservice/OJWS?wsdl" uri="wsdl/106.15.36.190_80/oj/webservice/OJWS.wsdl"/>
|
||||
<system systemId="https://219.228.76.122:443/oj/webservice/OJWS?wsdl" uri="wsdl/219.228.76.122_443/oj/webservice/OJWS.wsdl"/>
|
||||
<system systemId="https://219.228.76.122:8080/oj/webservice/OJWS?wsdl" uri="wsdl/219.228.76.122_8080/oj/webservice/OJWS.wsdl"/>
|
||||
</catalog>
|
||||
|
|
@ -872,7 +872,7 @@
|
|||
</wsdl:binding>
|
||||
<wsdl:service name="OJWS">
|
||||
<wsdl:port binding="tns:OJWSSoapBinding" name="OJWSImplPort">
|
||||
<soap:address location="http://106.15.36.190/oj/webservice/OJWS" />
|
||||
<soap:address location="https://219.228.76.122:8080/oj/webservice/OJWS" />
|
||||
</wsdl:port>
|
||||
</wsdl:service>
|
||||
</wsdl:definitions>
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -17,7 +17,7 @@ import javax.xml.ws.WebServiceFeature;
|
|||
* Generated source version: 2.2
|
||||
*
|
||||
*/
|
||||
@WebServiceClient(name = "OJWS", targetNamespace = "http://ws.dhu.edu/", wsdlLocation = "http://106.15.36.190:80/oj/webservice/OJWS?wsdl")
|
||||
@WebServiceClient(name = "OJWS", targetNamespace = "http://ws.dhu.edu/", wsdlLocation = "https://219.228.76.122:443/oj/webservice/OJWS?wsdl")
|
||||
public class OJWS_Service
|
||||
extends Service
|
||||
{
|
||||
|
|
@ -30,7 +30,7 @@ public class OJWS_Service
|
|||
URL url = null;
|
||||
WebServiceException e = null;
|
||||
try {
|
||||
url = new URL("http://106.15.36.190:80/oj/webservice/OJWS?wsdl");
|
||||
url = new URL("https://219.228.76.122:443/oj/webservice/OJWS?wsdl");
|
||||
} catch (MalformedURLException ex) {
|
||||
e = new WebServiceException(ex);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ import javax.xml.ws.WebServiceFeature;
|
|||
* Generated source version: 2.2
|
||||
*
|
||||
*/
|
||||
@WebServiceClient(name = "OJWS", targetNamespace = "http://ws.dhu.edu/", wsdlLocation = "http://106.15.36.190:80/oj/webservice/OJWS?wsdl")
|
||||
@WebServiceClient(name = "OJWS", targetNamespace = "http://ws.dhu.edu/", wsdlLocation = "https://219.228.76.122:443/oj/webservice/OJWS?wsdl")
|
||||
public class OJWS_Service
|
||||
extends Service
|
||||
{
|
||||
|
|
@ -30,7 +30,7 @@ public class OJWS_Service
|
|||
URL url = null;
|
||||
WebServiceException e = null;
|
||||
try {
|
||||
url = new URL("http://106.15.36.190:80/oj/webservice/OJWS?wsdl");
|
||||
url = new URL("https://219.228.76.122:443/oj/webservice/OJWS?wsdl");
|
||||
} catch (MalformedURLException ex) {
|
||||
e = new WebServiceException(ex);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,4 +3,6 @@
|
|||
<system systemId="http://47.95.22.126:8080/oj/webservice/OJWS?wsdl" uri="xml-resources/web-service-references/OJWS/wsdl/47.95.22.126_8080/oj/webservice/OJWS.wsdl"/>
|
||||
<system systemId="http://127.0.0.1:8080/oj/webservice/OJWS?wsdl" uri="xml-resources/web-service-references/OJWS/wsdl/127.0.0.1_8080/oj/webservice/OJWS.wsdl"/>
|
||||
<system systemId="http://106.15.36.190:80/oj/webservice/OJWS?wsdl" uri="xml-resources/web-service-references/OJWS/wsdl/106.15.36.190_80/oj/webservice/OJWS.wsdl"/>
|
||||
<system systemId="https://219.228.76.122:443/oj/webservice/OJWS?wsdl" uri="xml-resources/web-service-references/OJWS/wsdl/219.228.76.122_443/oj/webservice/OJWS.wsdl"/>
|
||||
<system systemId="https://219.228.76.122:8080/oj/webservice/OJWS?wsdl" uri="xml-resources/web-service-references/OJWS/wsdl/219.228.76.122_8080/oj/webservice/OJWS.wsdl"/>
|
||||
</catalog>
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<languages>
|
||||
<language id="C++" alias="c++,c,cpp,CPP,C">
|
||||
<compiler name="MSVC">
|
||||
<path>D:\裁判机\MSVC</path>
|
||||
<compileCmd>$compilerPath$/bin/cl.exe /O2 /Fo"$objFile$" /Fe"$exeFile$" /I $compilerPath$\include /EHsc "$sourceFile$" /link /LIBPATH:"$compilerPath$\lib" </compileCmd>
|
||||
<!-- g++.exe -Wall -g -std=c++14 -c D:\prog_old\test\main.cpp -o obj\Debug\main.o-->
|
||||
<linkCmd></linkCmd>
|
||||
<!-- <linkCmd>$compilerPath$/bin/link.exe /OUT:"$exeFile$" "$objFile$" /LIBPATH:"$compilerPath$\lib"</linkCmd> -->
|
||||
<!-- g++.exe -o bin\Debug\test.exe obj\Debug\main.o -O1-->
|
||||
<runCmd>$exeFile$</runCmd>
|
||||
</compiler>
|
||||
<compiler name="MinGW">
|
||||
<path>D:\裁判机\MinGW64\bin</path>
|
||||
<compileCmd>"$compilerPath$\g++" -Wall -g -c -std=c++1y "$sourceFile$" -o "$objFile$"</compileCmd>
|
||||
<!-- g++.exe -Wall -g -std=c++14 -c D:\prog_old\test\main.cpp -o obj\Debug\main.o-->
|
||||
<linkCmd>$compilerPath$\g++ "$objFile$" "$exeFile$" -o -O1</linkCmd>
|
||||
<!-- g++.exe -o bin\Debug\test.exe obj\Debug\main.o -O1-->
|
||||
<runCmd>$exeFile$</runCmd>
|
||||
</compiler>
|
||||
|
||||
|
||||
|
||||
</language>
|
||||
<language id="Java" alias="java,JAVA">
|
||||
<compiler name="JDK8">
|
||||
<path>C:\Program Files\Java\jdk1.8.0_121\bin</path>
|
||||
<compileCmd>"$compilerPath$/javac" $sourceFile$</compileCmd>
|
||||
|
||||
<linkCmd>g++.exe -o $exeFile$ $objFile$ -O1</linkCmd>
|
||||
<!-- g++.exe -o bin\Debug\test.exe obj\Debug\main.o -O1-->
|
||||
<runCmd>$exeFile$</runCmd>
|
||||
</compiler>
|
||||
</language>
|
||||
<language id="Python" alias="python,PYTHON,py,PY">
|
||||
<compiler name="Python3">
|
||||
<path>F:\裁判机\python3.12</path>
|
||||
<compileCmd> </compileCmd>
|
||||
<linkCmd> </linkCmd>
|
||||
<runCmd>$compilerPath$/python "$sourceFile$"</runCmd>
|
||||
</compiler>
|
||||
</language>
|
||||
</languages>
|
||||
|
|
@ -0,0 +1,63 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<languages>
|
||||
<language id="C++" alias="c++,cpp,CPP">
|
||||
<compiler name="MSVC">
|
||||
<path>.\MSVC</path>
|
||||
<compileCmd>$compilerPath$/bin/cl.exe /O2 /Fo"$objFile$" /Fe"$exeFile$" /I $compilerPath$\include /EHsc "$sourceFile$" /link /LIBPATH:"$compilerPath$\lib" </compileCmd>
|
||||
<!-- g++.exe -Wall -g -std=c++14 -c D:\prog_old\test\main.cpp -o obj\Debug\main.o-->
|
||||
<linkCmd></linkCmd>
|
||||
<!-- <linkCmd>$compilerPath$/bin/link.exe /OUT:"$exeFile$" "$objFile$" /LIBPATH:"$compilerPath$\lib"</linkCmd> -->
|
||||
<!-- g++.exe -o bin\Debug\test.exe obj\Debug\main.o -O1-->
|
||||
<runCmd>$exeFile$</runCmd>
|
||||
</compiler>
|
||||
<compiler name="MinGW">
|
||||
<path>.\MinGW64\bin</path>
|
||||
<compileCmd>"$compilerPath$\g++" -std=c++1y "$sourceFile$" -o "$exeFile$"</compileCmd>
|
||||
<!-- g++.exe -Wall -g -std=c++14 -c D:\prog_old\test\main.cpp -o obj\Debug\main.o-->
|
||||
<linkCmd></linkCmd>
|
||||
<!-- g++.exe -o bin\Debug\test.exe obj\Debug\main.o -O1-->
|
||||
<runCmd>.\test\output\Main.exe</runCmd>
|
||||
</compiler>
|
||||
</language>
|
||||
|
||||
<language id="C" alias="c">
|
||||
<compiler name="MSVC">
|
||||
<path>.\MSVC</path>
|
||||
<compileCmd>$compilerPath$/bin/cl.exe /O2 /Fo"$objFile$" /Fe"$exeFile$" /I $compilerPath$\include "$sourceFile$" /link /LIBPATH:"$compilerPath$\lib" </compileCmd>
|
||||
<!-- g++.exe -Wall -g -std=c++14 -c D:\prog_old\test\main.cpp -o obj\Debug\main.o-->
|
||||
<linkCmd></linkCmd>
|
||||
<!-- <linkCmd>$compilerPath$/bin/link.exe /OUT:"$exeFile$" "$objFile$" /LIBPATH:"$compilerPath$\lib"</linkCmd> -->
|
||||
<!-- g++.exe -o bin\Debug\test.exe obj\Debug\main.o -O1-->
|
||||
<runCmd>$exeFile$</runCmd>
|
||||
</compiler>
|
||||
<compiler name="MinGW">
|
||||
<path>.\MinGW64\bin</path>
|
||||
<compileCmd>"$compilerPath$\gcc" -std=c11 "$sourceFile$" -o "$exeFile$"</compileCmd>
|
||||
<!-- g++.exe -Wall -g -std=c++14 -c D:\prog_old\test\main.cpp -o obj\Debug\main.o-->
|
||||
<linkCmd></linkCmd>
|
||||
<!-- g++.exe -o bin\Debug\test.exe obj\Debug\main.o -O1-->
|
||||
<runCmd>.\test\output\Main.exe</runCmd>
|
||||
</compiler>
|
||||
|
||||
|
||||
|
||||
</language>
|
||||
<language id="Java" alias="java,JAVA">
|
||||
<compiler name="JDK8">
|
||||
<path>.\jdk1.8.0_121\bin</path>
|
||||
<compileCmd>"$compilerPath$/javac" $sourceFile$</compileCmd>
|
||||
|
||||
<linkCmd></linkCmd>
|
||||
<!-- g++.exe -o bin\Debug\test.exe obj\Debug\main.o -O1-->
|
||||
<runCmd>$exeFile$</runCmd>
|
||||
</compiler>
|
||||
</language>
|
||||
<language id="Python" alias="python,PYTHON,py,PY">
|
||||
<compiler name="Python 3.12">
|
||||
<path>.\python3.12</path>
|
||||
<compileCmd> </compileCmd>
|
||||
<linkCmd> </linkCmd>
|
||||
<runCmd>$compilerPath$/python "$sourceFile$"</runCmd>
|
||||
</compiler>
|
||||
</language>
|
||||
</languages>
|
||||
|
|
@ -1,26 +1,26 @@
|
|||
#update config.properties
|
||||
#Sat Jan 13 20:50:27 CST 2024
|
||||
srcDir=G\:\\org\\JuderUI\\test
|
||||
isCppRelative=true
|
||||
relativeJavaCompilerDir=C\:\\Program Files\\Java\\jdk1.8.0_40\\bin
|
||||
#Wed Feb 19 12:24:17 GMT+08:00 2025
|
||||
=\=\=\=\=\=\=
|
||||
<<<<<<<=.mine
|
||||
>>>>>>>=.r76
|
||||
Debug=1
|
||||
JavaCompileDir=C\:\\Program Files\\Java\\jdk1.8.0_121\\bin
|
||||
JavaRelative=3
|
||||
MinGWDir=C\:\\MinGW\\bin
|
||||
MinGWRelative=3
|
||||
StartThreadAuto=false
|
||||
ThreadNumber=1
|
||||
URLaddress=10.202.40.190
|
||||
Username=felix
|
||||
cCompilerDir=C\:\\\u65B0\u5EFA\u6587\u4EF6\u5939
|
||||
ThreadNumber=1
|
||||
distributorPort=80
|
||||
exeDir=G\:\\org\\JuderUI\\TMP
|
||||
MinGWDir=C\:\\MinGW\\bin
|
||||
relativeCCompilerDir=\\MinGW\\bin
|
||||
distributorIP=106.15.36.190
|
||||
JavaRelative=3
|
||||
>>>>>>>=.r76
|
||||
isJavaRelative=true
|
||||
<<<<<<<=.mine
|
||||
MinGWRelative=3
|
||||
relativeCppCompilerDir=\\MinGW\\bin
|
||||
javaCompilerDir=\\\\vmware-host\\Shared Folders\\\u6587\u7A3F\\NetBeansProjects\\oj\\client\\MinGW\\bin
|
||||
JavaCompileDir=C\:\\Program Files\\Java\\jdk1.8.0_121\\bin
|
||||
Debug=1
|
||||
URLaddress=10.202.40.190
|
||||
StartThreadAuto=true
|
||||
=\=\=\=\=\=\=
|
||||
cppCompilerDir=\\\\vmware-host\\Shared Folders\\\u6587\u7A3F\\NetBeansProjects\\oj\\client\\MinGW\\bin
|
||||
distributorIP=106.15.36.190
|
||||
distributorPort=8080
|
||||
exeDir=G\:\\org\\JuderUI\\TMP
|
||||
isCppRelative=true
|
||||
isJavaRelative=true
|
||||
javaCompilerDir=\\\\vmware-host\\Shared Folders\\\u6587\u7A3F\\NetBeansProjects\\oj\\client\\MinGW\\bin
|
||||
relativeCCompilerDir=\\MinGW\\bin
|
||||
relativeCppCompilerDir=\\MinGW\\bin
|
||||
relativeJavaCompilerDir=C\:\\Program Files\\Java\\jdk1.8.0_40\\bin
|
||||
srcDir=G\:\\org\\JuderUI\\test
|
||||
|
|
|
|||
BIN
JuderUI/dist.zip
BIN
JuderUI/dist.zip
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
|
|
@ -1,8 +1,8 @@
|
|||
build.xml.data.CRC32=dfbf39b8
|
||||
build.xml.script.CRC32=1513c9b5
|
||||
build.xml.stylesheet.CRC32=8064a381@1.79.1.48
|
||||
build.xml.stylesheet.CRC32=f85dc8f2@1.113.0.48
|
||||
# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
|
||||
# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
|
||||
nbproject/build-impl.xml.data.CRC32=dfbf39b8
|
||||
nbproject/build-impl.xml.script.CRC32=659c39b3
|
||||
nbproject/build-impl.xml.stylesheet.CRC32=05530350@1.79.1.48
|
||||
nbproject/build-impl.xml.script.CRC32=e468727d
|
||||
nbproject/build-impl.xml.stylesheet.CRC32=12e0a6c2@1.113.0.48
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue