Первая отправка
This commit is contained in:
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
/build
|
||||
/dist
|
||||
73
build.xml
Normal file
73
build.xml
Normal file
@ -0,0 +1,73 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- You may freely edit this file. See commented blocks below for -->
|
||||
<!-- some examples of how to customize the build. -->
|
||||
<!-- (If you delete it and reopen the project it will be recreated.) -->
|
||||
<!-- By default, only the Clean and Build commands use this build script. -->
|
||||
<!-- Commands such as Run, Debug, and Test only use this build script if -->
|
||||
<!-- the Compile on Save feature is turned off for the project. -->
|
||||
<!-- You can turn off the Compile on Save (or Deploy on Save) setting -->
|
||||
<!-- in the project's Project Properties dialog box.-->
|
||||
<project name="POTOXML_JavaSE" default="default" basedir=".">
|
||||
<description>Builds, tests, and runs the project POTOXML_JavaSE.</description>
|
||||
<import file="nbproject/build-impl.xml"/>
|
||||
<!--
|
||||
|
||||
There exist several targets which are by default empty and which can be
|
||||
used for execution of your tasks. These targets are usually executed
|
||||
before and after some main targets. They are:
|
||||
|
||||
-pre-init: called before initialization of project properties
|
||||
-post-init: called after initialization of project properties
|
||||
-pre-compile: called before javac compilation
|
||||
-post-compile: called after javac compilation
|
||||
-pre-compile-single: called before javac compilation of single file
|
||||
-post-compile-single: called after javac compilation of single file
|
||||
-pre-compile-test: called before javac compilation of JUnit tests
|
||||
-post-compile-test: called after javac compilation of JUnit tests
|
||||
-pre-compile-test-single: called before javac compilation of single JUnit test
|
||||
-post-compile-test-single: called after javac compilation of single JUunit test
|
||||
-pre-jar: called before JAR building
|
||||
-post-jar: called after JAR building
|
||||
-post-clean: called after cleaning build products
|
||||
|
||||
(Targets beginning with '-' are not intended to be called on their own.)
|
||||
|
||||
Example of inserting an obfuscator after compilation could look like this:
|
||||
|
||||
<target name="-post-compile">
|
||||
<obfuscate>
|
||||
<fileset dir="${build.classes.dir}"/>
|
||||
</obfuscate>
|
||||
</target>
|
||||
|
||||
For list of available properties check the imported
|
||||
nbproject/build-impl.xml file.
|
||||
|
||||
|
||||
Another way to customize the build is by overriding existing main targets.
|
||||
The targets of interest are:
|
||||
|
||||
-init-macrodef-javac: defines macro for javac compilation
|
||||
-init-macrodef-junit: defines macro for junit execution
|
||||
-init-macrodef-debug: defines macro for class debugging
|
||||
-init-macrodef-java: defines macro for class execution
|
||||
-do-jar: JAR building
|
||||
run: execution of project
|
||||
-javadoc-build: Javadoc generation
|
||||
test-report: JUnit report generation
|
||||
|
||||
An example of overriding the target for project execution could look like this:
|
||||
|
||||
<target name="run" depends="POTOXML_JavaSE-impl.jar">
|
||||
<exec dir="bin" executable="launcher.exe">
|
||||
<arg file="${dist.jar}"/>
|
||||
</exec>
|
||||
</target>
|
||||
|
||||
Notice that the overridden target depends on the jar target and not only on
|
||||
the compile target as the regular run target does. Again, for a list of available
|
||||
properties which you can use, check the target you are overriding in the
|
||||
nbproject/build-impl.xml file.
|
||||
|
||||
-->
|
||||
</project>
|
||||
3
manifest.mf
Normal file
3
manifest.mf
Normal file
@ -0,0 +1,3 @@
|
||||
Manifest-Version: 1.0
|
||||
X-COMMENT: Main-Class will be added automatically by build
|
||||
|
||||
1420
nbproject/build-impl.xml
Normal file
1420
nbproject/build-impl.xml
Normal file
File diff suppressed because it is too large
Load Diff
8
nbproject/genfiles.properties
Normal file
8
nbproject/genfiles.properties
Normal file
@ -0,0 +1,8 @@
|
||||
build.xml.data.CRC32=d935f596
|
||||
build.xml.script.CRC32=b59ecd6a
|
||||
build.xml.stylesheet.CRC32=8064a381@1.68.1.46
|
||||
# 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=d935f596
|
||||
nbproject/build-impl.xml.script.CRC32=da5956f2
|
||||
nbproject/build-impl.xml.stylesheet.CRC32=830a3534@1.80.1.48
|
||||
2
nbproject/private/private.properties
Normal file
2
nbproject/private/private.properties
Normal file
@ -0,0 +1,2 @@
|
||||
compile.on.save=true
|
||||
user.properties.file=C:\\Users\\ivanov.i.ISTT\\AppData\\Roaming\\NetBeans\\8.2\\build.properties
|
||||
7
nbproject/private/private.xml
Normal file
7
nbproject/private/private.xml
Normal file
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project-private xmlns="http://www.netbeans.org/ns/project-private/1">
|
||||
<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/>
|
||||
</open-files>
|
||||
</project-private>
|
||||
71
nbproject/project.properties
Normal file
71
nbproject/project.properties
Normal file
@ -0,0 +1,71 @@
|
||||
annotation.processing.enabled=true
|
||||
annotation.processing.enabled.in.editor=false
|
||||
annotation.processing.processor.options=
|
||||
annotation.processing.processors.list=
|
||||
annotation.processing.run.all.processors=true
|
||||
annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output
|
||||
build.classes.dir=${build.dir}/classes
|
||||
build.classes.excludes=**/*.java,**/*.form
|
||||
# This directory is removed when the project is cleaned:
|
||||
build.dir=build
|
||||
build.generated.dir=${build.dir}/generated
|
||||
build.generated.sources.dir=${build.dir}/generated-sources
|
||||
# Only compile against the classpath explicitly listed here:
|
||||
build.sysclasspath=ignore
|
||||
build.test.classes.dir=${build.dir}/test/classes
|
||||
build.test.results.dir=${build.dir}/test/results
|
||||
# Uncomment to specify the preferred debugger connection transport:
|
||||
#debug.transport=dt_socket
|
||||
debug.classpath=\
|
||||
${run.classpath}
|
||||
debug.test.classpath=\
|
||||
${run.test.classpath}
|
||||
# This directory is removed when the project is cleaned:
|
||||
dist.dir=dist
|
||||
dist.jar=${dist.dir}/POTOXML_JavaSE.jar
|
||||
dist.javadoc.dir=${dist.dir}/javadoc
|
||||
excludes=
|
||||
includes=**
|
||||
jar.compress=false
|
||||
javac.classpath=
|
||||
# Space-separated list of extra javac options
|
||||
javac.compilerargs=
|
||||
javac.deprecation=false
|
||||
javac.processorpath=\
|
||||
${javac.classpath}
|
||||
javac.source=1.6
|
||||
javac.target=1.6
|
||||
javac.test.classpath=\
|
||||
${javac.classpath}:\
|
||||
${build.classes.dir}
|
||||
javac.test.processorpath=\
|
||||
${javac.test.classpath}
|
||||
javadoc.additionalparam=
|
||||
javadoc.author=false
|
||||
javadoc.encoding=${source.encoding}
|
||||
javadoc.noindex=false
|
||||
javadoc.nonavbar=false
|
||||
javadoc.notree=false
|
||||
javadoc.private=false
|
||||
javadoc.splitindex=true
|
||||
javadoc.use=true
|
||||
javadoc.version=false
|
||||
javadoc.windowtitle=
|
||||
main.class=potoxml.NewJFrame
|
||||
manifest.file=manifest.mf
|
||||
meta.inf.dir=${src.dir}/META-INF
|
||||
mkdist.disabled=false
|
||||
platform.active=default_platform
|
||||
run.classpath=\
|
||||
${javac.classpath}:\
|
||||
${build.classes.dir}
|
||||
# Space-separated list of JVM arguments used when running the project.
|
||||
# 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.test.classpath=\
|
||||
${javac.test.classpath}:\
|
||||
${build.test.classes.dir}
|
||||
source.encoding=UTF-8
|
||||
src.dir=src
|
||||
test.src.dir=test
|
||||
15
nbproject/project.xml
Normal file
15
nbproject/project.xml
Normal file
@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://www.netbeans.org/ns/project/1">
|
||||
<type>org.netbeans.modules.java.j2seproject</type>
|
||||
<configuration>
|
||||
<data xmlns="http://www.netbeans.org/ns/j2se-project/3">
|
||||
<name>POTOXML_JavaSE</name>
|
||||
<source-roots>
|
||||
<root id="src.dir"/>
|
||||
</source-roots>
|
||||
<test-roots>
|
||||
<root id="test.src.dir"/>
|
||||
</test-roots>
|
||||
</data>
|
||||
</configuration>
|
||||
</project>
|
||||
109
src/potoxml/AssemblyJFrame.form
Normal file
109
src/potoxml/AssemblyJFrame.form
Normal file
@ -0,0 +1,109 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
|
||||
<Form version="1.3" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JFrameFormInfo">
|
||||
<Properties>
|
||||
<Property name="defaultCloseOperation" type="int" value="3"/>
|
||||
</Properties>
|
||||
<SyntheticProperties>
|
||||
<SyntheticProperty name="formSizePolicy" type="int" value="1"/>
|
||||
<SyntheticProperty name="generateCenter" type="boolean" value="false"/>
|
||||
</SyntheticProperties>
|
||||
<AuxValues>
|
||||
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
|
||||
<AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
|
||||
<AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
|
||||
<AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
|
||||
<AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
|
||||
<AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
|
||||
<AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
|
||||
<AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
|
||||
<AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
|
||||
</AuxValues>
|
||||
|
||||
<Layout>
|
||||
<DimensionLayout dim="0">
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<Group type="102" alignment="0" attributes="0">
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
<Component id="jLabel1" min="-2" max="-2" attributes="0"/>
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
<Component id="jTextField1" min="-2" pref="50" max="-2" attributes="0"/>
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
<Component id="jButton1" min="-2" pref="240" max="-2" attributes="0"/>
|
||||
<EmptySpace type="separate" max="-2" attributes="0"/>
|
||||
<Component id="jButton2" min="-2" pref="229" max="-2" attributes="0"/>
|
||||
<EmptySpace pref="111" max="32767" attributes="0"/>
|
||||
</Group>
|
||||
<Component id="jScrollPane1" alignment="1" max="32767" attributes="0"/>
|
||||
</Group>
|
||||
</DimensionLayout>
|
||||
<DimensionLayout dim="1">
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<Group type="102" alignment="0" attributes="0">
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<Group type="103" groupAlignment="3" attributes="0">
|
||||
<Component id="jButton1" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||
<Component id="jButton2" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||
</Group>
|
||||
<Group type="103" alignment="1" groupAlignment="3" attributes="0">
|
||||
<Component id="jTextField1" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||
<Component id="jLabel1" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||
</Group>
|
||||
</Group>
|
||||
<EmptySpace type="separate" max="-2" attributes="0"/>
|
||||
<Component id="jScrollPane1" pref="481" max="32767" attributes="0"/>
|
||||
</Group>
|
||||
</Group>
|
||||
</DimensionLayout>
|
||||
</Layout>
|
||||
<SubComponents>
|
||||
<Component class="javax.swing.JButton" name="jButton1">
|
||||
<Properties>
|
||||
<Property name="text" type="java.lang.String" value="Добавить файлик"/>
|
||||
</Properties>
|
||||
<Events>
|
||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jButton1ActionPerformed"/>
|
||||
</Events>
|
||||
</Component>
|
||||
<Container class="javax.swing.JScrollPane" name="jScrollPane1">
|
||||
<AuxValues>
|
||||
<AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/>
|
||||
</AuxValues>
|
||||
|
||||
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
|
||||
<SubComponents>
|
||||
<Component class="javax.swing.JTable" name="jTable1">
|
||||
<Properties>
|
||||
<Property name="model" type="javax.swing.table.TableModel" editor="org.netbeans.modules.form.editors2.TableModelEditor">
|
||||
<Table columnCount="4" rowCount="0">
|
||||
<Column editable="true" title="id" type="java.lang.String"/>
|
||||
<Column editable="true" title="lng 1" type="java.lang.String"/>
|
||||
<Column editable="true" title="lng 2" type="java.lang.String"/>
|
||||
<Column editable="true" title="lng 3" type="java.lang.String"/>
|
||||
</Table>
|
||||
</Property>
|
||||
</Properties>
|
||||
</Component>
|
||||
</SubComponents>
|
||||
</Container>
|
||||
<Component class="javax.swing.JButton" name="jButton2">
|
||||
<Properties>
|
||||
<Property name="text" type="java.lang.String" value="Экспортировать"/>
|
||||
</Properties>
|
||||
<Events>
|
||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jButton2ActionPerformed"/>
|
||||
</Events>
|
||||
</Component>
|
||||
<Component class="javax.swing.JTextField" name="jTextField1">
|
||||
<Properties>
|
||||
<Property name="text" type="java.lang.String" value="1"/>
|
||||
</Properties>
|
||||
</Component>
|
||||
<Component class="javax.swing.JLabel" name="jLabel1">
|
||||
<Properties>
|
||||
<Property name="text" type="java.lang.String" value="Открываемый столбец"/>
|
||||
</Properties>
|
||||
</Component>
|
||||
</SubComponents>
|
||||
</Form>
|
||||
326
src/potoxml/AssemblyJFrame.java
Normal file
326
src/potoxml/AssemblyJFrame.java
Normal file
@ -0,0 +1,326 @@
|
||||
/*
|
||||
* 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 potoxml;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.FileReader;
|
||||
import java.io.IOException;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import javax.swing.JFileChooser;
|
||||
import javax.swing.filechooser.FileNameExtensionFilter;
|
||||
import javax.swing.table.DefaultTableModel;
|
||||
import javax.xml.parsers.ParserConfigurationException;
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.NodeList;
|
||||
import org.xml.sax.SAXException;
|
||||
import tools.*;
|
||||
import tools.xml.XMLIO;
|
||||
import static tools.xml.XMLTools.isElement;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author ivanov.i
|
||||
*/
|
||||
public class AssemblyJFrame extends javax.swing.JFrame {
|
||||
|
||||
/**
|
||||
* Creates new form AssemblyJFrame
|
||||
*/
|
||||
public AssemblyJFrame() {
|
||||
initComponents();
|
||||
}
|
||||
|
||||
/**
|
||||
* This method is called from within the constructor to initialize the form.
|
||||
* WARNING: Do NOT modify this code. The content of this method is always
|
||||
* regenerated by the Form Editor.
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
|
||||
private void initComponents() {
|
||||
|
||||
jButton1 = new javax.swing.JButton();
|
||||
jScrollPane1 = new javax.swing.JScrollPane();
|
||||
jTable1 = new javax.swing.JTable();
|
||||
jButton2 = new javax.swing.JButton();
|
||||
jTextField1 = new javax.swing.JTextField();
|
||||
jLabel1 = new javax.swing.JLabel();
|
||||
|
||||
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
|
||||
|
||||
jButton1.setText("Добавить файлик");
|
||||
jButton1.addActionListener(new java.awt.event.ActionListener() {
|
||||
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||
jButton1ActionPerformed(evt);
|
||||
}
|
||||
});
|
||||
|
||||
jTable1.setModel(new javax.swing.table.DefaultTableModel(
|
||||
new Object [][] {
|
||||
|
||||
},
|
||||
new String [] {
|
||||
"id", "lng 1", "lng 2", "lng 3"
|
||||
}
|
||||
) {
|
||||
Class[] types = new Class [] {
|
||||
java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class
|
||||
};
|
||||
|
||||
public Class getColumnClass(int columnIndex) {
|
||||
return types [columnIndex];
|
||||
}
|
||||
});
|
||||
jScrollPane1.setViewportView(jTable1);
|
||||
|
||||
jButton2.setText("Экспортировать");
|
||||
jButton2.addActionListener(new java.awt.event.ActionListener() {
|
||||
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||
jButton2ActionPerformed(evt);
|
||||
}
|
||||
});
|
||||
|
||||
jTextField1.setText("1");
|
||||
|
||||
jLabel1.setText("Открываемый столбец");
|
||||
|
||||
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
|
||||
getContentPane().setLayout(layout);
|
||||
layout.setHorizontalGroup(
|
||||
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGroup(layout.createSequentialGroup()
|
||||
.addContainerGap()
|
||||
.addComponent(jLabel1)
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||
.addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||
.addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 240, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addGap(18, 18, 18)
|
||||
.addComponent(jButton2, javax.swing.GroupLayout.PREFERRED_SIZE, 229, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addContainerGap(111, Short.MAX_VALUE))
|
||||
.addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.TRAILING)
|
||||
);
|
||||
layout.setVerticalGroup(
|
||||
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGroup(layout.createSequentialGroup()
|
||||
.addContainerGap()
|
||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
||||
.addComponent(jButton1)
|
||||
.addComponent(jButton2))
|
||||
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
||||
.addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addComponent(jLabel1)))
|
||||
.addGap(18, 18, 18)
|
||||
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 481, Short.MAX_VALUE))
|
||||
);
|
||||
|
||||
pack();
|
||||
}// </editor-fold>//GEN-END:initComponents
|
||||
|
||||
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
|
||||
|
||||
|
||||
DefaultTableModel model = (DefaultTableModel) jTable1.getModel();
|
||||
int colT = Integer.parseInt(jTextField1.getText());
|
||||
|
||||
JFileChooser chooser = new JFileChooser();
|
||||
chooser.addChoosableFileFilter(new FileNameExtensionFilter("Android XML", "xml"));
|
||||
chooser.addChoosableFileFilter(new FileNameExtensionFilter("Poedit PO", "po"));
|
||||
int returnVal = chooser.showOpenDialog(this);
|
||||
if(returnVal == JFileChooser.APPROVE_OPTION)
|
||||
{
|
||||
if(Tools.afterLast(chooser.getSelectedFile().getName(), ".").toLowerCase().equals("xml"))
|
||||
{
|
||||
try {
|
||||
|
||||
Document doc = XMLIO.load(chooser.getSelectedFile().getAbsolutePath());
|
||||
|
||||
NodeList nl = doc.getDocumentElement().getChildNodes();
|
||||
for (int i = 0; i <nl.getLength(); i++)
|
||||
{
|
||||
if (isElement(nl.item(i), "string"))
|
||||
{
|
||||
String msgid=nl.item(i).getAttributes().getNamedItem("name").getNodeValue();
|
||||
String msgstr=nl.item(i).getLastChild().getTextContent();
|
||||
//nl.item(i).getLastChild().getTextContent().trim()
|
||||
|
||||
int pos = -1;
|
||||
for(int ii=0; ii<model.getRowCount(); ii++)
|
||||
{
|
||||
if(model.getValueAt(ii, 0).equals(msgid))
|
||||
{
|
||||
pos=i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(pos!=-1)
|
||||
{
|
||||
model.setValueAt(msgstr, pos, colT);
|
||||
}else
|
||||
{
|
||||
if(colT==1)
|
||||
{
|
||||
Object[] row = { msgid, msgstr, "", "" };
|
||||
model.addRow(row);
|
||||
}else
|
||||
if(colT==2)
|
||||
{
|
||||
Object[] row = { msgid, "", msgstr, "" };
|
||||
model.addRow(row);
|
||||
}else
|
||||
if(colT==3)
|
||||
{ Object[] row = { msgid, "", "", msgstr };
|
||||
model.addRow(row);
|
||||
}
|
||||
}
|
||||
//System.out.println(nl.item(i).getAttributes().getNamedItem("name").toString());
|
||||
}
|
||||
}
|
||||
|
||||
} catch (ParserConfigurationException ex) {
|
||||
Logger.getLogger(AssemblyJFrame.class.getName()).log(Level.SEVERE, null, ex);
|
||||
} catch (IOException ex) {
|
||||
Logger.getLogger(AssemblyJFrame.class.getName()).log(Level.SEVERE, null, ex);
|
||||
} catch (SAXException ex) {
|
||||
Logger.getLogger(AssemblyJFrame.class.getName()).log(Level.SEVERE, null, ex);
|
||||
}
|
||||
|
||||
}else
|
||||
{
|
||||
try
|
||||
{
|
||||
BufferedReader reader = new BufferedReader(new FileReader(chooser.getSelectedFile().getAbsolutePath()));
|
||||
String line;
|
||||
String msgid="",msgstr="";
|
||||
int cnt=0;
|
||||
while (true)
|
||||
{
|
||||
line = reader.readLine();
|
||||
if(line.indexOf("msgid")==0)
|
||||
{
|
||||
msgid = Tools.beforeLast(Tools.afterFirst(line, "\""),"\"");
|
||||
cnt++;
|
||||
}
|
||||
if(line.indexOf("msgstr")==0)
|
||||
{
|
||||
msgstr = Tools.beforeLast(Tools.afterFirst(line, "\""),"\"");
|
||||
cnt++;
|
||||
}
|
||||
if(cnt==2)
|
||||
{
|
||||
//Ищем идентификатор если он есть то обновляем ячейку если его нет то добавляем строку
|
||||
int pos = -1;
|
||||
for(int i=0; i<model.getRowCount(); i++)
|
||||
{
|
||||
if(model.getValueAt(i, 0).equals(msgid))
|
||||
{
|
||||
pos=i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(pos!=-1)
|
||||
{
|
||||
model.setValueAt(msgstr, pos, colT);
|
||||
}else
|
||||
{
|
||||
if(colT==1)
|
||||
{
|
||||
Object[] row = { msgid, msgstr, "", "" };
|
||||
model.addRow(row);
|
||||
}else
|
||||
if(colT==2)
|
||||
{
|
||||
Object[] row = { msgid, "", msgstr, "" };
|
||||
model.addRow(row);
|
||||
}else
|
||||
if(colT==3)
|
||||
{ Object[] row = { msgid, "", "", msgstr };
|
||||
model.addRow(row);
|
||||
}
|
||||
}
|
||||
cnt=0;
|
||||
}
|
||||
}
|
||||
} catch (IOException ex)
|
||||
{
|
||||
Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
BufferedReader reader = new BufferedReader(new StringReader(textArea2.getText()));
|
||||
String line1;
|
||||
String line2;
|
||||
try
|
||||
{
|
||||
while (true)
|
||||
{
|
||||
line1 = reader.readLine();
|
||||
line2 = reader.readLine();
|
||||
if(line1==null || line2 == null) break;
|
||||
//Парсим файлы и выписываем идентификаторы для перевода
|
||||
parse(line1, line2); //Перезаписывает файл
|
||||
}
|
||||
} catch (IOException ex)
|
||||
{
|
||||
Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
|
||||
}
|
||||
*/
|
||||
}//GEN-LAST:event_jButton1ActionPerformed
|
||||
|
||||
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed
|
||||
|
||||
//TODO Записываем в строку в виде HTML строки затем сохраняем в файл
|
||||
|
||||
}//GEN-LAST:event_jButton2ActionPerformed
|
||||
|
||||
/**
|
||||
* @param args the command line arguments
|
||||
*/
|
||||
public static void main(String args[]) {
|
||||
/* Set the Nimbus look and feel */
|
||||
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
|
||||
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
|
||||
* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
|
||||
*/
|
||||
try {
|
||||
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
|
||||
if ("Nimbus".equals(info.getName())) {
|
||||
javax.swing.UIManager.setLookAndFeel(info.getClassName());
|
||||
break;
|
||||
}
|
||||
}
|
||||
} catch (ClassNotFoundException ex) {
|
||||
java.util.logging.Logger.getLogger(AssemblyJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
|
||||
} catch (InstantiationException ex) {
|
||||
java.util.logging.Logger.getLogger(AssemblyJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
|
||||
} catch (IllegalAccessException ex) {
|
||||
java.util.logging.Logger.getLogger(AssemblyJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
|
||||
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
|
||||
java.util.logging.Logger.getLogger(AssemblyJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
|
||||
}
|
||||
//</editor-fold>
|
||||
|
||||
/* Create and display the form */
|
||||
java.awt.EventQueue.invokeLater(new Runnable() {
|
||||
public void run() {
|
||||
new AssemblyJFrame().setVisible(true);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||
private javax.swing.JButton jButton1;
|
||||
private javax.swing.JButton jButton2;
|
||||
private javax.swing.JLabel jLabel1;
|
||||
private javax.swing.JScrollPane jScrollPane1;
|
||||
private javax.swing.JTable jTable1;
|
||||
private javax.swing.JTextField jTextField1;
|
||||
// End of variables declaration//GEN-END:variables
|
||||
}
|
||||
270
src/potoxml/FileFinder.java
Normal file
270
src/potoxml/FileFinder.java
Normal file
@ -0,0 +1,270 @@
|
||||
package potoxml;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FilenameFilter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
/**
|
||||
* Этот класс предназначен для поиска файлов
|
||||
*
|
||||
* @author Стаценко Владимир http://www.vova-prog.narod.ru
|
||||
*/
|
||||
public class FileFinder
|
||||
{
|
||||
|
||||
//классы для работы с регулярными выражениями
|
||||
private Pattern p = null;
|
||||
private Matcher m = null;
|
||||
//общий размер найденных файлов
|
||||
private long totalLength = 0;
|
||||
//общее количество найденных файлов
|
||||
private long filesNumber = 0;
|
||||
//общее количество просмотренных директорий
|
||||
private long directoriesNumber = 0;
|
||||
//константы для определения объектов, которые нужно найти
|
||||
private final int FILES = 0;
|
||||
private final int DIRECTORIES = 1;
|
||||
private final int ALL = 2;
|
||||
|
||||
/**
|
||||
* Создает новые экземпляры FileFinder
|
||||
*/
|
||||
public FileFinder()
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Этот метод выполняет поиск всех объектов (файлов и директорий), начиная с
|
||||
* заданной директории (startPath)
|
||||
*
|
||||
* @param startPath Начальная директория поиска
|
||||
* @return Список (List) найденных объектов
|
||||
* @throws java.lang.Exception если возникли ошибки в процессе поиска
|
||||
*/
|
||||
public List findAll(String startPath) throws Exception
|
||||
{
|
||||
return find(startPath, "", ALL);
|
||||
}
|
||||
|
||||
/**
|
||||
* Этот метод выполняет поиск объектов (файлов и директорий), которые
|
||||
* соответствуют заданному регулярному выражению (mask), начиная с заданной
|
||||
* директории (startPath)
|
||||
*
|
||||
* @param startPath Начальная директория поиска
|
||||
* @param mask регулярное выражение, которому должны соответствовать имена
|
||||
* найденный объектов
|
||||
* @throws java.lang.Exception если возникли ошибки в процессе поиска
|
||||
* @return Список (List) найденных объектов
|
||||
*/
|
||||
public List findAll(String startPath, String mask)
|
||||
throws Exception
|
||||
{
|
||||
return find(startPath, mask, ALL);
|
||||
}
|
||||
|
||||
/**
|
||||
* Этот метод выполняет поиск всех файлов, начиная с заданной директории
|
||||
* (startPath)
|
||||
*
|
||||
* @param startPath Начальная директория поиска
|
||||
* @return Список (List) найденных объектов
|
||||
* @throws java.lang.Exception если возникли ошибки в процессе поиска
|
||||
*/
|
||||
public List findFiles(String startPath)
|
||||
throws Exception
|
||||
{
|
||||
return find(startPath, "", FILES);
|
||||
}
|
||||
|
||||
/**
|
||||
* Этот метод выполняет поиск файлов, которые соответствуют заданному
|
||||
* регулярному выражению (mask), начиная с заданной директории (startPath)
|
||||
*
|
||||
* @param startPath Начальная директория поиска
|
||||
* @param mask регулярное выражение, которому должны соответствовать имена
|
||||
* найденный объектов
|
||||
* @throws java.lang.Exception если возникли ошибки в процессе поиска
|
||||
* @return Список (List) найденных объектов
|
||||
*/
|
||||
public List findFiles(String startPath, String mask)
|
||||
throws Exception
|
||||
{
|
||||
return find(startPath, mask, FILES);
|
||||
}
|
||||
|
||||
/**
|
||||
* Этот метод выполняет поиск всех директорий (папок), начиная с заданной
|
||||
* директории (startPath)
|
||||
*
|
||||
* @param startPath Начальная директория поиска
|
||||
* @return Список (List) найденных объектов
|
||||
* @throws java.lang.Exception если возникли ошибки в процессе поиска
|
||||
*/
|
||||
public List findDirectories(String startPath)
|
||||
throws Exception
|
||||
{
|
||||
return find(startPath, "", DIRECTORIES);
|
||||
}
|
||||
|
||||
/**
|
||||
* Этот метод выполняет поиск директорий (папок), которые соответствуют
|
||||
* заданному регулярному выражению (mask), начиная с заданной директории
|
||||
* (startPath)
|
||||
*
|
||||
* @param startPath Начальная директория поиска
|
||||
* @param mask регулярное выражение, которому должны соответствовать имена
|
||||
* найденный объектов
|
||||
* @throws java.lang.Exception если возникли ошибки в процессе поиска
|
||||
* @return Список (List) найденных объектов
|
||||
*/
|
||||
public List findDirectories(String startPath, String mask)
|
||||
throws Exception
|
||||
{
|
||||
return find(startPath, mask, DIRECTORIES);
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает суммарный размер найденных файлов
|
||||
*
|
||||
* @return размер найденных файлов (байт)
|
||||
*/
|
||||
public long getDirectorySize()
|
||||
{
|
||||
return totalLength;
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает общее количество найденных файлов
|
||||
*
|
||||
* @return количество найденных файлов
|
||||
*/
|
||||
public long getFilesNumber()
|
||||
{
|
||||
return filesNumber;
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает общее количество найденных директорий (папок)
|
||||
*
|
||||
* @return количество найденных директорий (папок)
|
||||
*/
|
||||
public long getDirectoriesNumber()
|
||||
{
|
||||
return directoriesNumber;
|
||||
}
|
||||
|
||||
/*
|
||||
Проверяет, соответствует ли имя файла заданному
|
||||
регулярному выражению. Возвращает true, если найденный
|
||||
объект соответствует регулярному выражению, false - в
|
||||
противном случае.
|
||||
*/
|
||||
private boolean accept(String name)
|
||||
{
|
||||
//если регулярное выражение не задано...
|
||||
if (p == null)
|
||||
{
|
||||
//...значит объект подходит
|
||||
return true;
|
||||
}
|
||||
//создаем Matcher
|
||||
m = p.matcher(name);
|
||||
//выполняем проверку
|
||||
if (m.matches())
|
||||
{
|
||||
return true;
|
||||
} else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
Этот метод выполняет начальные установки поиска.
|
||||
Затем вызывает метод search для выполнения поиска.
|
||||
*/
|
||||
private List find(String startPath, String mask, int objectType)
|
||||
throws Exception
|
||||
{
|
||||
//проверка параметров
|
||||
if (startPath == null || mask == null)
|
||||
{
|
||||
throw new Exception("Ошибка: не заданы параметры поиска");
|
||||
}
|
||||
File topDirectory = new File(startPath);
|
||||
if (!topDirectory.exists())
|
||||
{
|
||||
throw new Exception("Ошибка: указанный путь не существует");
|
||||
}
|
||||
//если задано регулярное выражение, создаем Pattern
|
||||
if (!mask.equals(""))
|
||||
{
|
||||
p = Pattern.compile(mask, Pattern.CASE_INSENSITIVE | Pattern.COMMENTS); //Pattern.UNIcomment_CASE
|
||||
}
|
||||
//обнуляем все счетчики
|
||||
filesNumber = 0;
|
||||
directoriesNumber = 0;
|
||||
totalLength = 0;
|
||||
//создаем список результатов
|
||||
ArrayList res = new ArrayList(100);
|
||||
|
||||
//выполняем поиск
|
||||
search(topDirectory, res, objectType);
|
||||
|
||||
//присваиваем null шаблону, т.к. при следующем вызове find...
|
||||
//регулярное выражение может быть не задано
|
||||
p = null;
|
||||
//возвращаем результат
|
||||
return res;
|
||||
}
|
||||
|
||||
/*
|
||||
Этот метод выполняет поиск объектов заданного типа.
|
||||
Если, в процессе поиска, встречает вложенную директорию
|
||||
(папку), то рекурсивно вызывает сам себя.
|
||||
Результаты поиска сохраняются в параметре res.
|
||||
Текущая директория - topDirectory.
|
||||
Тип объекта (файл или директория) - objectType.
|
||||
*/
|
||||
private void search(File topDirectory, List res, int objectType)
|
||||
{
|
||||
//получаем список всех объектов в текущей директории
|
||||
File[] list = topDirectory.listFiles();
|
||||
//просматриваем все объекты по-очереди
|
||||
for (int i = 0; i < list.length; i++)
|
||||
{
|
||||
//если это директория (папка)...
|
||||
if (list[i].isDirectory())
|
||||
{
|
||||
//...выполняем проверку на соответствие типу объекта
|
||||
// и регулярному выражению...
|
||||
if (objectType != FILES && accept(list[i].getName()))
|
||||
{
|
||||
//...добавляем текущий объект в список результатов,
|
||||
//и обновляем значения счетчиков
|
||||
directoriesNumber++;
|
||||
res.add(list[i]);
|
||||
}
|
||||
//выполняем поиск во вложенных директориях
|
||||
search(list[i], res, objectType);
|
||||
} //если это файл
|
||||
else
|
||||
{
|
||||
//...выполняем проверку на соответствие типу объекта
|
||||
// и регулярному выражению...
|
||||
if (objectType != DIRECTORIES && accept(list[i].getName()))
|
||||
{
|
||||
//...добавляем текущий объект в список результатов,
|
||||
//и обновляем значения счетчиков
|
||||
filesNumber++;
|
||||
totalLength += list[i].length();
|
||||
res.add(list[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
212
src/potoxml/NewJFrame.form
Normal file
212
src/potoxml/NewJFrame.form
Normal file
@ -0,0 +1,212 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
|
||||
<Form version="1.3" maxVersion="1.8" type="org.netbeans.modules.form.forminfo.JFrameFormInfo">
|
||||
<Properties>
|
||||
<Property name="defaultCloseOperation" type="int" value="3"/>
|
||||
</Properties>
|
||||
<SyntheticProperties>
|
||||
<SyntheticProperty name="formSizePolicy" type="int" value="1"/>
|
||||
<SyntheticProperty name="generateCenter" type="boolean" value="false"/>
|
||||
</SyntheticProperties>
|
||||
<AuxValues>
|
||||
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
|
||||
<AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
|
||||
<AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
|
||||
<AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
|
||||
<AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
|
||||
<AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
|
||||
<AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
|
||||
<AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
|
||||
<AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
|
||||
</AuxValues>
|
||||
|
||||
<Layout>
|
||||
<DimensionLayout dim="0">
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<Group type="102" attributes="0">
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<Group type="102" alignment="1" attributes="0">
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<Component id="textArea2" max="32767" attributes="0"/>
|
||||
<Group type="102" alignment="0" attributes="0">
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<Component id="jLabel1" min="-2" max="-2" attributes="0"/>
|
||||
<Component id="jLabel2" alignment="0" min="-2" max="-2" attributes="0"/>
|
||||
</Group>
|
||||
<EmptySpace min="0" pref="0" max="32767" attributes="0"/>
|
||||
</Group>
|
||||
</Group>
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
<Group type="103" groupAlignment="0" max="-2" attributes="0">
|
||||
<Component id="jButton2" max="32767" attributes="0"/>
|
||||
<Component id="jButton3" max="32767" attributes="0"/>
|
||||
</Group>
|
||||
</Group>
|
||||
<Component id="textArea1" alignment="0" max="32767" attributes="0"/>
|
||||
<Component id="jButton1" alignment="1" min="-2" max="-2" attributes="0"/>
|
||||
<Component id="jTabbedPane1" alignment="1" max="32767" attributes="0"/>
|
||||
</Group>
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
</Group>
|
||||
</Group>
|
||||
</DimensionLayout>
|
||||
<DimensionLayout dim="1">
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<Group type="102" alignment="1" attributes="0">
|
||||
<Group type="103" groupAlignment="1" attributes="0">
|
||||
<Group type="102" attributes="0">
|
||||
<EmptySpace min="-2" pref="24" max="-2" attributes="0"/>
|
||||
<Component id="jButton2" min="-2" max="-2" attributes="0"/>
|
||||
</Group>
|
||||
<Group type="102" attributes="0">
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
<Group type="103" groupAlignment="3" attributes="0">
|
||||
<Component id="jLabel2" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||
<Component id="jButton3" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||
</Group>
|
||||
<EmptySpace max="32767" attributes="0"/>
|
||||
<Component id="textArea2" min="-2" pref="118" max="-2" attributes="0"/>
|
||||
</Group>
|
||||
</Group>
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
<Component id="jLabel1" min="-2" max="-2" attributes="0"/>
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
<Component id="textArea1" min="-2" pref="143" max="-2" attributes="0"/>
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
<Component id="jButton1" min="-2" max="-2" attributes="0"/>
|
||||
<EmptySpace type="unrelated" max="-2" attributes="0"/>
|
||||
<Component id="jTabbedPane1" min="-2" pref="366" max="-2" attributes="0"/>
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
</Group>
|
||||
</Group>
|
||||
</DimensionLayout>
|
||||
</Layout>
|
||||
<SubComponents>
|
||||
<Component class="javax.swing.JButton" name="jButton1">
|
||||
<Properties>
|
||||
<Property name="text" type="java.lang.String" value="Сканировать"/>
|
||||
<Property name="name" type="java.lang.String" value="" noResource="true"/>
|
||||
</Properties>
|
||||
<Events>
|
||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jButton1ActionPerformed"/>
|
||||
</Events>
|
||||
</Component>
|
||||
<Component class="javax.swing.JLabel" name="jLabel1">
|
||||
<Properties>
|
||||
<Property name="text" type="java.lang.String" value="Перебираем файлы и создаём единый PHP файлик с _(“слово”)."/>
|
||||
</Properties>
|
||||
</Component>
|
||||
<Component class="java.awt.TextArea" name="textArea1">
|
||||
</Component>
|
||||
<Component class="java.awt.TextArea" name="textArea2">
|
||||
</Component>
|
||||
<Component class="javax.swing.JButton" name="jButton2">
|
||||
<Properties>
|
||||
<Property name="text" type="java.lang.String" value="Сохранить настройки"/>
|
||||
</Properties>
|
||||
<Events>
|
||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jButton2ActionPerformed"/>
|
||||
</Events>
|
||||
</Component>
|
||||
<Component class="javax.swing.JLabel" name="jLabel2">
|
||||
<Properties>
|
||||
<Property name="text" type="java.lang.String" value="Пути для сканирования"/>
|
||||
</Properties>
|
||||
</Component>
|
||||
<Component class="javax.swing.JButton" name="jButton3">
|
||||
<Properties>
|
||||
<Property name="text" type="java.lang.String" value="Экспорт"/>
|
||||
</Properties>
|
||||
<Events>
|
||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jButton3ActionPerformed"/>
|
||||
</Events>
|
||||
</Component>
|
||||
<Container class="javax.swing.JTabbedPane" name="jTabbedPane1">
|
||||
|
||||
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout"/>
|
||||
<SubComponents>
|
||||
<Container class="javax.swing.JPanel" name="jPanel1">
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout" value="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout$JTabbedPaneConstraintsDescription">
|
||||
<JTabbedPaneConstraints tabName="English">
|
||||
<Property name="tabTitle" type="java.lang.String" value="English"/>
|
||||
</JTabbedPaneConstraints>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
|
||||
<Layout>
|
||||
<DimensionLayout dim="0">
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<Group type="102" alignment="0" attributes="0">
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
<Component id="jLabel3" min="-2" max="-2" attributes="0"/>
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
<Component id="jTextField1" min="-2" pref="573" max="-2" attributes="0"/>
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
<Component id="jButton4" min="-2" pref="139" max="-2" attributes="0"/>
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
</Group>
|
||||
</Group>
|
||||
</DimensionLayout>
|
||||
<DimensionLayout dim="1">
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<Group type="102" alignment="0" attributes="0">
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
<Group type="103" groupAlignment="3" attributes="0">
|
||||
<Component id="jTextField1" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||
<Component id="jLabel3" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||
<Component id="jButton4" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||
</Group>
|
||||
<EmptySpace pref="304" max="32767" attributes="0"/>
|
||||
</Group>
|
||||
</Group>
|
||||
</DimensionLayout>
|
||||
</Layout>
|
||||
<SubComponents>
|
||||
<Component class="javax.swing.JTextField" name="jTextField1">
|
||||
<Properties>
|
||||
<Property name="text" type="java.lang.String" value="jTextField1"/>
|
||||
</Properties>
|
||||
</Component>
|
||||
<Component class="javax.swing.JLabel" name="jLabel3">
|
||||
<Properties>
|
||||
<Property name="text" type="java.lang.String" value="Файл:"/>
|
||||
</Properties>
|
||||
</Component>
|
||||
<Component class="javax.swing.JButton" name="jButton4">
|
||||
<Properties>
|
||||
<Property name="text" type="java.lang.String" value="Выбрать/Создать"/>
|
||||
</Properties>
|
||||
<Events>
|
||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jButton4ActionPerformed"/>
|
||||
</Events>
|
||||
</Component>
|
||||
</SubComponents>
|
||||
</Container>
|
||||
<Container class="javax.swing.JPanel" name="jPanel2">
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout" value="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout$JTabbedPaneConstraintsDescription">
|
||||
<JTabbedPaneConstraints tabName="Русский">
|
||||
<Property name="tabTitle" type="java.lang.String" value="Русский"/>
|
||||
</JTabbedPaneConstraints>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
|
||||
<Layout>
|
||||
<DimensionLayout dim="0">
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<EmptySpace min="0" pref="772" max="32767" attributes="0"/>
|
||||
</Group>
|
||||
</DimensionLayout>
|
||||
<DimensionLayout dim="1">
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<EmptySpace min="0" pref="338" max="32767" attributes="0"/>
|
||||
</Group>
|
||||
</DimensionLayout>
|
||||
</Layout>
|
||||
</Container>
|
||||
</SubComponents>
|
||||
</Container>
|
||||
</SubComponents>
|
||||
</Form>
|
||||
391
src/potoxml/NewJFrame.java
Normal file
391
src/potoxml/NewJFrame.java
Normal file
@ -0,0 +1,391 @@
|
||||
/*
|
||||
* To change this template, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
package potoxml;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.BufferedWriter;
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FileReader;
|
||||
import java.io.FileWriter;
|
||||
import java.io.FilenameFilter;
|
||||
import java.io.IOException;
|
||||
import java.io.StringReader;
|
||||
import java.util.List;
|
||||
import java.util.Stack;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author ivanov.i
|
||||
*/
|
||||
public class NewJFrame extends javax.swing.JFrame
|
||||
{
|
||||
|
||||
/**
|
||||
* Creates new form NewJFrame
|
||||
*/
|
||||
public NewJFrame()
|
||||
{
|
||||
initComponents();
|
||||
|
||||
//Загружаем настройки из текстового файла
|
||||
BufferedReader reader;
|
||||
try
|
||||
{
|
||||
reader = new BufferedReader(new FileReader("settings.txt"));
|
||||
String line = null;
|
||||
while ((line = reader.readLine()) != null)
|
||||
{
|
||||
textArea2.append(line + "\n");
|
||||
}
|
||||
} catch (FileNotFoundException ex)
|
||||
{
|
||||
Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
|
||||
} catch (IOException ex)
|
||||
{
|
||||
Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This method is called from within the constructor to initialize the form.
|
||||
* WARNING: Do NOT modify this code. The content of this method is always
|
||||
* regenerated by the Form Editor.
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
|
||||
private void initComponents() {
|
||||
|
||||
jButton1 = new javax.swing.JButton();
|
||||
jLabel1 = new javax.swing.JLabel();
|
||||
textArea1 = new java.awt.TextArea();
|
||||
textArea2 = new java.awt.TextArea();
|
||||
jButton2 = new javax.swing.JButton();
|
||||
jLabel2 = new javax.swing.JLabel();
|
||||
jButton3 = new javax.swing.JButton();
|
||||
jTabbedPane1 = new javax.swing.JTabbedPane();
|
||||
jPanel1 = new javax.swing.JPanel();
|
||||
jTextField1 = new javax.swing.JTextField();
|
||||
jLabel3 = new javax.swing.JLabel();
|
||||
jButton4 = new javax.swing.JButton();
|
||||
jPanel2 = new javax.swing.JPanel();
|
||||
|
||||
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
|
||||
|
||||
jButton1.setText("Сканировать");
|
||||
jButton1.setName(""); // NOI18N
|
||||
jButton1.addActionListener(new java.awt.event.ActionListener() {
|
||||
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||
jButton1ActionPerformed(evt);
|
||||
}
|
||||
});
|
||||
|
||||
jLabel1.setText("Перебираем файлы и создаём единый PHP файлик с _(“слово”).");
|
||||
|
||||
jButton2.setText("Сохранить настройки");
|
||||
jButton2.addActionListener(new java.awt.event.ActionListener() {
|
||||
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||
jButton2ActionPerformed(evt);
|
||||
}
|
||||
});
|
||||
|
||||
jLabel2.setText("Пути для сканирования");
|
||||
|
||||
jButton3.setText("Экспорт");
|
||||
jButton3.addActionListener(new java.awt.event.ActionListener() {
|
||||
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||
jButton3ActionPerformed(evt);
|
||||
}
|
||||
});
|
||||
|
||||
jTextField1.setText("jTextField1");
|
||||
|
||||
jLabel3.setText("Файл:");
|
||||
|
||||
jButton4.setText("Выбрать/Создать");
|
||||
jButton4.addActionListener(new java.awt.event.ActionListener() {
|
||||
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||
jButton4ActionPerformed(evt);
|
||||
}
|
||||
});
|
||||
|
||||
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
|
||||
jPanel1.setLayout(jPanel1Layout);
|
||||
jPanel1Layout.setHorizontalGroup(
|
||||
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGroup(jPanel1Layout.createSequentialGroup()
|
||||
.addContainerGap()
|
||||
.addComponent(jLabel3)
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||
.addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 573, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||
.addComponent(jButton4, javax.swing.GroupLayout.PREFERRED_SIZE, 139, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addContainerGap())
|
||||
);
|
||||
jPanel1Layout.setVerticalGroup(
|
||||
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGroup(jPanel1Layout.createSequentialGroup()
|
||||
.addContainerGap()
|
||||
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
||||
.addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addComponent(jLabel3)
|
||||
.addComponent(jButton4))
|
||||
.addContainerGap(304, Short.MAX_VALUE))
|
||||
);
|
||||
|
||||
jTabbedPane1.addTab("English", jPanel1);
|
||||
|
||||
javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
|
||||
jPanel2.setLayout(jPanel2Layout);
|
||||
jPanel2Layout.setHorizontalGroup(
|
||||
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGap(0, 772, Short.MAX_VALUE)
|
||||
);
|
||||
jPanel2Layout.setVerticalGroup(
|
||||
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGap(0, 338, Short.MAX_VALUE)
|
||||
);
|
||||
|
||||
jTabbedPane1.addTab("Русский", jPanel2);
|
||||
|
||||
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
|
||||
getContentPane().setLayout(layout);
|
||||
layout.setHorizontalGroup(
|
||||
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGroup(layout.createSequentialGroup()
|
||||
.addContainerGap()
|
||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
|
||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addComponent(textArea2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
||||
.addGroup(layout.createSequentialGroup()
|
||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addComponent(jLabel1)
|
||||
.addComponent(jLabel2))
|
||||
.addGap(0, 0, Short.MAX_VALUE)))
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
|
||||
.addComponent(jButton2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
||||
.addComponent(jButton3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
|
||||
.addComponent(textArea1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
||||
.addComponent(jButton1, javax.swing.GroupLayout.Alignment.TRAILING)
|
||||
.addComponent(jTabbedPane1, javax.swing.GroupLayout.Alignment.TRAILING))
|
||||
.addContainerGap())
|
||||
);
|
||||
layout.setVerticalGroup(
|
||||
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
|
||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
|
||||
.addGroup(layout.createSequentialGroup()
|
||||
.addGap(24, 24, 24)
|
||||
.addComponent(jButton2))
|
||||
.addGroup(layout.createSequentialGroup()
|
||||
.addContainerGap()
|
||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
||||
.addComponent(jLabel2)
|
||||
.addComponent(jButton3))
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
||||
.addComponent(textArea2, javax.swing.GroupLayout.PREFERRED_SIZE, 118, javax.swing.GroupLayout.PREFERRED_SIZE)))
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||
.addComponent(jLabel1)
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||
.addComponent(textArea1, javax.swing.GroupLayout.PREFERRED_SIZE, 143, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||
.addComponent(jButton1)
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
||||
.addComponent(jTabbedPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 366, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addContainerGap())
|
||||
);
|
||||
|
||||
pack();
|
||||
}// </editor-fold>//GEN-END:initComponents
|
||||
|
||||
private void parse(String rootDir,String file)
|
||||
{
|
||||
// Просматриваем каталоги
|
||||
FileFinder finder = new FileFinder();
|
||||
try
|
||||
{
|
||||
// Буферный файл для записи идентификаторов
|
||||
FileWriter fileWriter = new FileWriter(file);
|
||||
BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
|
||||
bufferedWriter.write("<?\n");
|
||||
|
||||
List searchRes = null;
|
||||
searchRes = finder.findAll(rootDir,"(.*\\.as$)||(.*\\.mxml$)||(.*\\.xml$)");
|
||||
|
||||
//выводим результаты
|
||||
for (int i = 0; i < searchRes.size(); i++)
|
||||
{
|
||||
File curObject = (File) searchRes.get(i);
|
||||
if (curObject.isDirectory())
|
||||
{
|
||||
System.out.println(curObject.getName() + " (папка)");
|
||||
textArea1.append(curObject.getAbsolutePath() + " (папка)\n");
|
||||
} else
|
||||
{
|
||||
System.out.println(curObject.getName() + " (" + curObject.length() + " байт)");
|
||||
textArea1.append(curObject.getAbsolutePath() + " (" + curObject.length() + " байт)\n");
|
||||
|
||||
|
||||
// Открываем файл и ищем идентификаторы
|
||||
FileReader fileReader = new FileReader(curObject.getAbsolutePath());
|
||||
BufferedReader bufferedReader = new BufferedReader(fileReader);
|
||||
String line;
|
||||
//bufferedWriter.write("1\n");
|
||||
while((line = bufferedReader.readLine()) != null)
|
||||
{
|
||||
int from=0;
|
||||
while(true) //Если несколько значений в строке
|
||||
{
|
||||
int s=line.indexOf("_(", from);
|
||||
if(s>=0)
|
||||
{
|
||||
from=s+2;
|
||||
int e=-1;
|
||||
if(line.charAt(s+2) == '"') { e=line.indexOf("\")", from); }
|
||||
if(line.charAt(s+2) == '\'') { e = line.indexOf("')", from); }
|
||||
if(e>=0)
|
||||
{
|
||||
textArea1.append(line.substring(s, e + 2)+";\n");
|
||||
bufferedWriter.write(" "+line.substring(s, e + 2)+";\n");
|
||||
from=e+2;
|
||||
}
|
||||
}else { break; }
|
||||
}
|
||||
}
|
||||
bufferedReader.close();
|
||||
}
|
||||
}
|
||||
System.out.println("Найдено " + finder.getFilesNumber() + " файлов и " + finder.getDirectoriesNumber() + " папок.");
|
||||
textArea1.append("Найдено " + finder.getFilesNumber() + " файлов и " + finder.getDirectoriesNumber() + " папок.\n");
|
||||
|
||||
bufferedWriter.write("?>\n");
|
||||
bufferedWriter.close();
|
||||
|
||||
} catch (Exception err)
|
||||
{
|
||||
System.out.println(err.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_jButton1ActionPerformed
|
||||
{//GEN-HEADEREND:event_jButton1ActionPerformed
|
||||
BufferedReader reader = new BufferedReader(new StringReader(textArea2.getText()));
|
||||
String line1;
|
||||
String line2;
|
||||
try
|
||||
{
|
||||
while (true)
|
||||
{
|
||||
line1 = reader.readLine();
|
||||
line2 = reader.readLine();
|
||||
if(line1==null || line2 == null) break;
|
||||
//Парсим файлы и выписываем идентификаторы для перевода
|
||||
parse(line1, line2); //Перезаписывает файл
|
||||
}
|
||||
} catch (IOException ex)
|
||||
{
|
||||
Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
|
||||
}
|
||||
}//GEN-LAST:event_jButton1ActionPerformed
|
||||
|
||||
|
||||
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_jButton2ActionPerformed
|
||||
{//GEN-HEADEREND:event_jButton2ActionPerformed
|
||||
FileWriter fileWriter = null;
|
||||
try
|
||||
{
|
||||
fileWriter = new FileWriter("settings.txt");
|
||||
BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
|
||||
bufferedWriter.write(textArea2.getText());
|
||||
bufferedWriter.close();
|
||||
} catch (IOException ex)
|
||||
{
|
||||
Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
|
||||
} finally
|
||||
{
|
||||
try
|
||||
{
|
||||
fileWriter.close();
|
||||
} catch (IOException ex)
|
||||
{
|
||||
Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
|
||||
}
|
||||
}
|
||||
}//GEN-LAST:event_jButton2ActionPerformed
|
||||
|
||||
private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton3ActionPerformed
|
||||
|
||||
new AssemblyJFrame().setVisible(true);
|
||||
|
||||
}//GEN-LAST:event_jButton3ActionPerformed
|
||||
|
||||
private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton4ActionPerformed
|
||||
// TODO add your handling code here:
|
||||
}//GEN-LAST:event_jButton4ActionPerformed
|
||||
|
||||
/**
|
||||
* @param args the command line arguments
|
||||
*/
|
||||
public static void main(String args[])
|
||||
{
|
||||
/* Set the Nimbus look and feel */
|
||||
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
|
||||
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
|
||||
* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
|
||||
*/
|
||||
try
|
||||
{
|
||||
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels())
|
||||
{
|
||||
if ("Nimbus".equals(info.getName()))
|
||||
{
|
||||
javax.swing.UIManager.setLookAndFeel(info.getClassName());
|
||||
break;
|
||||
}
|
||||
}
|
||||
} catch (ClassNotFoundException ex)
|
||||
{
|
||||
java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
|
||||
} catch (InstantiationException ex)
|
||||
{
|
||||
java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
|
||||
} catch (IllegalAccessException ex)
|
||||
{
|
||||
java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
|
||||
} catch (javax.swing.UnsupportedLookAndFeelException ex)
|
||||
{
|
||||
java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
|
||||
}
|
||||
//</editor-fold>
|
||||
|
||||
/* Create and display the form */
|
||||
java.awt.EventQueue.invokeLater(new Runnable()
|
||||
{
|
||||
public void run()
|
||||
{
|
||||
new NewJFrame().setVisible(true);
|
||||
}
|
||||
});
|
||||
}
|
||||
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||
private javax.swing.JButton jButton1;
|
||||
private javax.swing.JButton jButton2;
|
||||
private javax.swing.JButton jButton3;
|
||||
private javax.swing.JButton jButton4;
|
||||
private javax.swing.JLabel jLabel1;
|
||||
private javax.swing.JLabel jLabel2;
|
||||
private javax.swing.JLabel jLabel3;
|
||||
private javax.swing.JPanel jPanel1;
|
||||
private javax.swing.JPanel jPanel2;
|
||||
private javax.swing.JTabbedPane jTabbedPane1;
|
||||
private javax.swing.JTextField jTextField1;
|
||||
private java.awt.TextArea textArea1;
|
||||
private java.awt.TextArea textArea2;
|
||||
// End of variables declaration//GEN-END:variables
|
||||
}
|
||||
17
src/tools/Circle.java
Normal file
17
src/tools/Circle.java
Normal file
@ -0,0 +1,17 @@
|
||||
package tools;
|
||||
|
||||
import java.awt.geom.Point2D;
|
||||
|
||||
/**
|
||||
* Created by IntelliJ IDEA.
|
||||
* User: Admin
|
||||
* Date: 14.07.2008
|
||||
* Time: 13:01:41
|
||||
* To change this template use File | Settings | File Templates.
|
||||
*/
|
||||
|
||||
public class Circle
|
||||
{
|
||||
Point2D.Float cnt=new Point2D.Float(); //центр
|
||||
float r=0; //радиус
|
||||
}
|
||||
287
src/tools/Download2.java
Normal file
287
src/tools/Download2.java
Normal file
@ -0,0 +1,287 @@
|
||||
package tiptopTool;
|
||||
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.net.URLConnection;
|
||||
import java.io.*;
|
||||
import java.util.Observable;
|
||||
import java.util.Observer;
|
||||
|
||||
/**
|
||||
* Created by IntelliJ IDEA.
|
||||
* User: Igor
|
||||
* Date: 11.12.2005
|
||||
* Time: 13:45:51
|
||||
* To change this template use File | Settings | File Templates.
|
||||
*/
|
||||
|
||||
// This class downloads a file from a URL.
|
||||
public class Download2 extends Observable implements Runnable
|
||||
{
|
||||
|
||||
// Max size of download buffer.
|
||||
private static final int MAX_BUFFER_SIZE = 1024;
|
||||
|
||||
// These are the status names.
|
||||
public static final String STATUSES[] = {"Загрузка", "Пауза", "Завершенно", "Отменено", "Ошыбка"};
|
||||
|
||||
// These are the status codes.
|
||||
public static final int DOWNLOADING = 0;
|
||||
public static final int PAUSED = 10;
|
||||
public static final int COMPLETE = 2;
|
||||
public static final int CANCELLED = 3;
|
||||
public static final int ERROR = 4;
|
||||
|
||||
public static URL urla;
|
||||
public URL url; // download URL //bylo private
|
||||
public String fileName; //путь к файлу
|
||||
public String description="";
|
||||
private int size; // size of download in bytes
|
||||
private int downloaded; // number of bytes downloaded
|
||||
private int status; // current status of download
|
||||
|
||||
private byte buffer[];//if save in the buffer
|
||||
// Constructor for Download.
|
||||
|
||||
public int getDownloaded()
|
||||
{
|
||||
return downloaded;
|
||||
}
|
||||
|
||||
public Download2(URL url,String fileName)
|
||||
{
|
||||
this.url = url;
|
||||
this.fileName=fileName;
|
||||
size = -1;
|
||||
downloaded = 0;
|
||||
status = DOWNLOADING;
|
||||
}
|
||||
// Get this download's URL.
|
||||
public String getUrl()
|
||||
{
|
||||
return url.toString();
|
||||
}
|
||||
// Get this download's size.
|
||||
public int getSize()
|
||||
{
|
||||
return size;
|
||||
}
|
||||
// Get this download's progress.
|
||||
public float getProgress()
|
||||
{
|
||||
return ((float) downloaded / size) * 100;
|
||||
}
|
||||
// Get this download's status.
|
||||
public int getStatus()
|
||||
{
|
||||
return status;
|
||||
}
|
||||
// Pause this download.
|
||||
public void pause()
|
||||
{
|
||||
status = PAUSED;
|
||||
stateChanged();
|
||||
}
|
||||
// Resume this download.
|
||||
public void resume()
|
||||
{
|
||||
status = DOWNLOADING;
|
||||
stateChanged();
|
||||
download();
|
||||
}
|
||||
// Cancel this download.
|
||||
public void cancel()
|
||||
{
|
||||
status = CANCELLED;
|
||||
stateChanged();
|
||||
}
|
||||
// Mark this download as having an error.
|
||||
private void error()
|
||||
{
|
||||
status = ERROR;
|
||||
stateChanged();
|
||||
}
|
||||
// Start or resume downloading.
|
||||
public void download()
|
||||
{
|
||||
Thread thread = new Thread(this);
|
||||
thread.start();
|
||||
}
|
||||
// Download
|
||||
public void run()
|
||||
{
|
||||
//System.out.println("run");
|
||||
RandomAccessFile file = null;
|
||||
InputStream stream = null;
|
||||
|
||||
try
|
||||
{
|
||||
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
|
||||
connection.setRequestProperty("Range","bytes=" + downloaded + "-");// Specify what portion of file to download.
|
||||
// Connect to server.
|
||||
connection.connect(); //System.out.println("connection to " + connection.getContentType()+" ResponseCode " + connection.getResponseCode());
|
||||
if (connection.getResponseCode() / 100 != 2) // провери отве севера
|
||||
{
|
||||
error();
|
||||
}
|
||||
// Connect to server.
|
||||
//connection.connect();
|
||||
//System.out.println(connection.getHeaderField(0).toString());
|
||||
//System.out.println("Тип пакета = " + connection.getContentType());
|
||||
//System.out.println("Заголовок = " + connection.getHeaderField(1));
|
||||
//System.out.println("Класс " + connection.toString());
|
||||
//System.out.println("Код ответа " + connection.getResponseCode());
|
||||
|
||||
// Check for valid content length.
|
||||
int contentLength = connection.getContentLength();
|
||||
//System.out.println("Размер загружаемого файла =" + contentLength);
|
||||
if (contentLength < 1)
|
||||
{
|
||||
error();
|
||||
}
|
||||
// Set the size for this download if it
|
||||
//hasn't been already set.
|
||||
if (size == -1)
|
||||
{
|
||||
size = contentLength;
|
||||
stateChanged();
|
||||
}
|
||||
|
||||
// Open file and seek to the end of it.
|
||||
if (!fileName.equals(""))
|
||||
{
|
||||
file = new RandomAccessFile(fileName, "rw");
|
||||
file.seek(downloaded);
|
||||
}
|
||||
if (fileName.equals("")) //фаил не задан сохраняем в буфер
|
||||
{
|
||||
this.buffer = new byte[size];
|
||||
}
|
||||
|
||||
stream = connection.getInputStream();
|
||||
while (status == DOWNLOADING)
|
||||
{
|
||||
if (!fileName.equals("")) //если сохраняем в фаил
|
||||
{
|
||||
byte buffer[];
|
||||
if (size - downloaded > MAX_BUFFER_SIZE)
|
||||
{
|
||||
buffer = new byte[MAX_BUFFER_SIZE];
|
||||
} else
|
||||
{
|
||||
buffer = new byte[size - downloaded];
|
||||
}
|
||||
// Read from server into buffer.
|
||||
int read = stream.read(buffer);
|
||||
if (read == -1)
|
||||
break;
|
||||
// Write buffer to file.
|
||||
file.write(buffer, 0, read);
|
||||
downloaded += read;
|
||||
}
|
||||
if (fileName.equals("")) //если сохраняем в буфер
|
||||
{
|
||||
byte buffer[];
|
||||
if (size - downloaded > MAX_BUFFER_SIZE)
|
||||
{
|
||||
buffer = new byte[MAX_BUFFER_SIZE];
|
||||
} else
|
||||
{
|
||||
buffer = new byte[size - downloaded];
|
||||
}
|
||||
// Read from server into buffer.
|
||||
int read = stream.read(buffer);
|
||||
if (read == -1)
|
||||
break;
|
||||
// Write small buffer to big buffer.
|
||||
for(int i=downloaded;i<downloaded+read;i++)
|
||||
{
|
||||
this.buffer[i]=buffer[i-downloaded];
|
||||
}
|
||||
downloaded += read;
|
||||
}
|
||||
stateChanged();
|
||||
}
|
||||
// Change status to complete if this point was
|
||||
//reached because downloading has finished.
|
||||
if (status == DOWNLOADING)
|
||||
{
|
||||
status = COMPLETE;
|
||||
stateChanged();
|
||||
}
|
||||
} catch (Exception e)
|
||||
{
|
||||
error();
|
||||
} finally
|
||||
{
|
||||
// Close file.
|
||||
if (file != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
file.close();
|
||||
} catch (Exception e)
|
||||
{
|
||||
}
|
||||
}
|
||||
// Close connection to server.
|
||||
if (stream != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
stream.close();
|
||||
} catch (Exception e)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* get loaded data
|
||||
* @return Stream data
|
||||
*/
|
||||
public DataInputStream getData()
|
||||
{
|
||||
if (fileName.equals("")) //если сохраняем в буфер
|
||||
{
|
||||
return new DataInputStream(new BufferedInputStream(new ByteArrayInputStream(buffer)));
|
||||
}else
|
||||
if (!fileName.equals("")) //если сохраняем в буфер
|
||||
{
|
||||
try
|
||||
{
|
||||
//System.out.println("Запрошенные данные = "+fileName);
|
||||
return new DataInputStream(new BufferedInputStream(new FileInputStream(fileName)));
|
||||
} catch (FileNotFoundException e)
|
||||
{
|
||||
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
// Notify observers that this download's status has changed.
|
||||
private void stateChanged()
|
||||
{
|
||||
setChanged();
|
||||
notifyObservers(this);
|
||||
//System.out.println("Загруженно = "+downloaded+" из="+size);
|
||||
}
|
||||
|
||||
public static void main(String args[])
|
||||
{
|
||||
try
|
||||
{
|
||||
URL a = new URL("http://tiptopcity.com/java/d.php");
|
||||
Download2 pobieranie = new Download2(a,"d.php");
|
||||
pobieranie.download();
|
||||
|
||||
} catch (MalformedURLException e)
|
||||
{
|
||||
System.out.println("Bad URL gayos");
|
||||
}
|
||||
}
|
||||
}
|
||||
32
src/tools/Net.java
Normal file
32
src/tools/Net.java
Normal file
@ -0,0 +1,32 @@
|
||||
package tiptopTool;
|
||||
|
||||
/**
|
||||
* Created by IntelliJ IDEA.
|
||||
* User: igor
|
||||
* Date: 02.03.2006
|
||||
* Time: 20:13:27
|
||||
* To change this template use File | Settings | File Templates.
|
||||
*/
|
||||
import java.io.*;
|
||||
import java.net.*;
|
||||
|
||||
public class Net {
|
||||
public static void main(String args[]) {
|
||||
try {
|
||||
URL url = new URL("http://www.ru");
|
||||
LineNumberReader r = new LineNumberReader(new InputStreamReader(url.openStream()));
|
||||
String s = r.readLine();
|
||||
while (s!=null)
|
||||
{
|
||||
System.out.println(s);
|
||||
s = r.readLine();
|
||||
}
|
||||
System.out.println(r.getLineNumber());
|
||||
r.close();
|
||||
} catch (MalformedURLException e) {
|
||||
e.printStackTrace();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
613
src/tools/Tools.java
Normal file
613
src/tools/Tools.java
Normal file
@ -0,0 +1,613 @@
|
||||
package tools;
|
||||
|
||||
import java.io.*;
|
||||
import java.awt.geom.Point2D;
|
||||
import java.net.*;
|
||||
import java.io.FileNotFoundException;
|
||||
|
||||
/**
|
||||
* Created by IntelliJ IDEA.
|
||||
* User: Igor
|
||||
* Date: 29.11.2005
|
||||
* Time: 20:27:28
|
||||
* To change this template use File | Settings | File Templates.
|
||||
*/
|
||||
public class Tools
|
||||
{
|
||||
public static String beforeFirst(String str, String ch)
|
||||
{
|
||||
int i=str.indexOf(ch);
|
||||
if(i!=-1)
|
||||
{
|
||||
return str.substring(0,i);
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
public static String afterFirst(String str, String ch)
|
||||
{
|
||||
int i=str.indexOf(ch);
|
||||
if(i!=-1)
|
||||
{
|
||||
return str.substring(i+ch.length());
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
public static String beforeLast(String str, String ch)
|
||||
{
|
||||
int i=str.lastIndexOf(ch);
|
||||
if(i!=-1)
|
||||
{
|
||||
return str.substring(0,i);
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
public static String afterLast(String str, String ch)
|
||||
{
|
||||
int i=str.lastIndexOf(ch);
|
||||
if(i!=-1)
|
||||
{
|
||||
return str.substring(i+ch.length());
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
/**
|
||||
* Чтение флоата совместимого с Delphi
|
||||
*
|
||||
* @param InStream
|
||||
* @return
|
||||
* @throws IOException
|
||||
*/
|
||||
public static float readFloat(DataInputStream InStream) throws IOException
|
||||
{
|
||||
float f;
|
||||
int ch1, ch2, ch3, ch4, count;
|
||||
ch1 = InStream.readUnsignedByte();
|
||||
ch2 = InStream.readUnsignedByte();
|
||||
ch3 = InStream.readUnsignedByte();
|
||||
ch4 = InStream.readUnsignedByte();
|
||||
|
||||
count = (ch4 << 24) | (ch3 << 16) | (ch2 << 8) | ch1;
|
||||
f = Float.intBitsToFloat(count);
|
||||
return f;
|
||||
}
|
||||
|
||||
/**
|
||||
* запросить страицу с сервера
|
||||
*
|
||||
* @param strURL Адрес (php, html)
|
||||
* @return html страница
|
||||
*/
|
||||
public static String getHTMLFromURL(String strURL)
|
||||
{
|
||||
String rez = null;
|
||||
String inputLine = null;
|
||||
try
|
||||
{
|
||||
rez = new String("".getBytes(), "utf-8");
|
||||
inputLine = new String("".getBytes(), "utf-8");
|
||||
} catch (UnsupportedEncodingException e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
}
|
||||
try
|
||||
{
|
||||
URL url = new URL(strURL);
|
||||
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
|
||||
conn.setDoOutput(true);
|
||||
conn.setDoInput(true);
|
||||
conn.setRequestMethod("POST");
|
||||
conn.setRequestProperty("Content-Type", "application/x- www-form-urlencoded");
|
||||
DataOutputStream outwriter = new DataOutputStream(conn.getOutputStream());
|
||||
//outwriter.writeBytes(post);
|
||||
outwriter.flush();
|
||||
outwriter.close();
|
||||
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
|
||||
while ((inputLine = in.readLine()) != null)
|
||||
{
|
||||
rez += inputLine + "\n";
|
||||
}
|
||||
in.close();
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
}
|
||||
return rez;
|
||||
}
|
||||
|
||||
public static InputStream getHTMLFromURL2(String strURL)
|
||||
{
|
||||
String fileName = System.getProperty("java.io.tmpdir") + "tiptopcity.tmp";
|
||||
try
|
||||
{
|
||||
URL u = new URL(strURL);
|
||||
HttpURLConnection huc = (HttpURLConnection) u.openConnection();
|
||||
huc.setRequestMethod("GET");
|
||||
huc.connect();
|
||||
InputStream is = huc.getInputStream();
|
||||
int code = huc.getResponseCode();
|
||||
if (code == HttpURLConnection.HTTP_OK)
|
||||
{
|
||||
byte[] buffer = new byte[4096]; //4 Kb
|
||||
FileOutputStream outputStream = new FileOutputStream(new File(fileName));
|
||||
int bytes;
|
||||
while (true)
|
||||
{
|
||||
bytes = is.read(buffer);
|
||||
if (bytes <= 0) break;
|
||||
outputStream.write(buffer, 0, bytes);
|
||||
}
|
||||
outputStream.close();
|
||||
}
|
||||
huc.disconnect();
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
System.out.println("Exception\n" + e);
|
||||
}
|
||||
try
|
||||
{
|
||||
return new FileInputStream(new File(fileName));
|
||||
} catch (FileNotFoundException e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static byte[] getHTMLFromURL3(String strURL)
|
||||
{
|
||||
URL u=null;
|
||||
try
|
||||
{
|
||||
u = new URL(strURL);
|
||||
} catch (MalformedURLException e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
}
|
||||
return getHTMLFromURL3(u);
|
||||
}
|
||||
public static byte[] getHTMLFromURL3(URL u)
|
||||
{
|
||||
String fileName = System.getProperty("java.io.tmpdir") + "tiptopcity.tmp";
|
||||
try
|
||||
{
|
||||
HttpURLConnection huc = (HttpURLConnection) u.openConnection();
|
||||
huc.setRequestMethod("GET");
|
||||
huc.connect();
|
||||
InputStream is = huc.getInputStream();
|
||||
int code = huc.getResponseCode();
|
||||
if (code == HttpURLConnection.HTTP_OK)
|
||||
{
|
||||
byte[] buffer = new byte[4096]; //4 Kb
|
||||
FileOutputStream outputStream = new FileOutputStream(new File(fileName));
|
||||
int bytes;
|
||||
while (true)
|
||||
{
|
||||
bytes = is.read(buffer);
|
||||
if (bytes <= 0) break;
|
||||
outputStream.write(buffer, 0, bytes);
|
||||
}
|
||||
outputStream.close();
|
||||
}
|
||||
huc.disconnect();
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
System.out.println("Exception\n" + e);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
return loadFileAsBytes(fileName);
|
||||
} catch (IOException e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
}
|
||||
return new byte[0];
|
||||
}
|
||||
//для передачи XML на сервер
|
||||
public static String getHTMLFromURL4(String u,String data)
|
||||
{
|
||||
String rez="";
|
||||
try {
|
||||
//String data = URLEncoder.encode("<?xml version=\"1.0\" encoding=\"utf-8\"?><metadata fn=\"0\" htmlid=\"0\" treeid=\"-1\"><filter></filter></metadata>", "UTF-8");
|
||||
byte[] mas=data.getBytes();
|
||||
URL url = new URL(u);
|
||||
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
|
||||
conn.setDoOutput(true);
|
||||
conn.setDoInput(true);
|
||||
conn.setUseCaches (false);
|
||||
conn.setRequestMethod("POST");
|
||||
conn.setRequestProperty( "User-Agent", "Mozilla/4.0" );
|
||||
conn.setRequestProperty( "Content-Type", "text/xml" );
|
||||
conn.setRequestProperty( "Content-Length", String.valueOf(mas.length));
|
||||
OutputStream wr = conn.getOutputStream();
|
||||
wr.write(mas);
|
||||
wr.flush();
|
||||
int rc = conn.getResponseCode();
|
||||
if(rc==200) // Get the response
|
||||
{
|
||||
String line="";
|
||||
BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
|
||||
while ((line = rd.readLine()) != null)
|
||||
{
|
||||
rez += line;
|
||||
}
|
||||
rd.close();
|
||||
}
|
||||
wr.close();
|
||||
} catch (Exception e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
}
|
||||
return rez;
|
||||
}
|
||||
|
||||
public static byte[] loadFileAsBytes(String fileName) throws IOException
|
||||
{
|
||||
return loadFileAsBytes(new File(fileName));
|
||||
}
|
||||
|
||||
public static byte[] loadFileAsBytes(File file) throws IOException
|
||||
{
|
||||
byte[] result = new byte[(int) file.length()];
|
||||
loadFileAsBytes(file, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
public static void loadFileAsBytes(File file, byte[] buf) throws IOException
|
||||
{
|
||||
loadFileAsBytes(file, buf, 0, buf.length);
|
||||
}
|
||||
|
||||
public static void loadFileAsBytes(File file, byte[] buf, int off, int len) throws IOException
|
||||
{
|
||||
FileInputStream f = new FileInputStream(file);
|
||||
try
|
||||
{
|
||||
f.read(buf, off, len);
|
||||
} finally
|
||||
{
|
||||
try
|
||||
{
|
||||
f.close();
|
||||
} catch (Exception e)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static String loadFileAsString(File file, String encoding) throws IOException
|
||||
{
|
||||
InputStreamReader f = encoding == null ? new FileReader(file) :
|
||||
new InputStreamReader(new FileInputStream(file), encoding);
|
||||
StringBuffer sb = new StringBuffer();
|
||||
try
|
||||
{
|
||||
char[] buf = new char[32768];
|
||||
int len;
|
||||
while ((len = f.read(buf, 0, buf.length)) >= 0)
|
||||
{
|
||||
sb.append(buf, 0, len);
|
||||
}
|
||||
return sb.toString();
|
||||
} finally
|
||||
{
|
||||
try
|
||||
{
|
||||
f.close();
|
||||
} catch (Exception e)
|
||||
{
|
||||
}
|
||||
;
|
||||
}
|
||||
}
|
||||
|
||||
public static String loadFileAsString(String fileName, String encoding)throws IOException
|
||||
{
|
||||
return loadFileAsString(new File(fileName), encoding);
|
||||
}
|
||||
|
||||
public static char[] loadFileAsChars(String fileName, String encoding) throws IOException
|
||||
{
|
||||
return loadFileAsChars(new File(fileName), encoding);
|
||||
}
|
||||
|
||||
public static char[] loadFileAsChars(File file, String encoding) throws IOException
|
||||
{
|
||||
String buf = loadFileAsString(file, encoding);
|
||||
char[] result = new char[buf.length()];
|
||||
buf.getChars(0, result.length, result, 0);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
public static void loadFileAsChars(File file, String encoding, char[] buf) throws IOException
|
||||
{
|
||||
loadFileAsChars(file, encoding, buf, 0, buf.length);
|
||||
}
|
||||
|
||||
|
||||
public static void loadFileAsChars(File file, String encoding,char[] buf, int off, int len) throws IOException
|
||||
{
|
||||
InputStreamReader f = encoding == null ?
|
||||
new FileReader(file) :
|
||||
new InputStreamReader(
|
||||
new FileInputStream(file), encoding);
|
||||
try
|
||||
{
|
||||
f.read(buf, off, len);
|
||||
|
||||
} finally
|
||||
{
|
||||
try
|
||||
{
|
||||
f.close();
|
||||
} catch (Exception e)
|
||||
{
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
public static void saveFileFromString(String fileName, String encoding, String v) throws IOException
|
||||
{
|
||||
saveFileFromString(new File(fileName), encoding, v);
|
||||
}
|
||||
|
||||
|
||||
public static void saveFileFromString(File file, String encoding, String v) throws IOException
|
||||
{
|
||||
if (v == null)
|
||||
{
|
||||
file.delete();
|
||||
return;
|
||||
}
|
||||
char[] buf = new char[v.length()];
|
||||
v.getChars(0, buf.length, buf, 0);
|
||||
saveFileFromChars(file, encoding, buf);
|
||||
}
|
||||
|
||||
|
||||
public static void saveFileFromChars( String fileName, String encoding, char[] buf) throws IOException
|
||||
{
|
||||
saveFileFromChars(new File(fileName), encoding, buf);
|
||||
}
|
||||
|
||||
|
||||
public static void saveFileFromChars(File file, String encoding, char[] buf) throws IOException
|
||||
{
|
||||
if (buf == null)
|
||||
{
|
||||
file.delete();
|
||||
return;
|
||||
}
|
||||
saveFileFromChars(file, encoding, buf, 0, buf.length);
|
||||
}
|
||||
|
||||
|
||||
public static void saveFileFromChars(File file, String encoding, char[] buf, int off, int len) throws IOException
|
||||
{
|
||||
if (buf == null)
|
||||
{
|
||||
file.delete();
|
||||
return;
|
||||
}
|
||||
OutputStreamWriter f = encoding == null ? new FileWriter(file) : new OutputStreamWriter(new FileOutputStream(file), encoding);
|
||||
try
|
||||
{
|
||||
f.write(buf, off, len);
|
||||
} catch (IOException e)
|
||||
{
|
||||
try
|
||||
{
|
||||
f.close();
|
||||
} catch (Exception e1)
|
||||
{
|
||||
}
|
||||
;
|
||||
return;
|
||||
}
|
||||
f.close();
|
||||
}
|
||||
|
||||
/**
|
||||
* Чтение Integera совместимого с delphi
|
||||
*
|
||||
* @param InStream
|
||||
* @return
|
||||
* @throws IOException
|
||||
*/
|
||||
public static int readInt(DataInputStream InStream) throws IOException
|
||||
{
|
||||
int ch1, ch2, ch3, ch4, count;
|
||||
ch1 = InStream.readUnsignedByte();
|
||||
ch2 = InStream.readUnsignedByte();
|
||||
ch3 = InStream.readUnsignedByte();
|
||||
ch4 = InStream.readUnsignedByte();
|
||||
|
||||
count = (ch4 << 24) | (ch3 << 16) | (ch2 << 8) | ch1;
|
||||
return count;
|
||||
}
|
||||
|
||||
/**
|
||||
* Чтение ASCI строки из файла знак конца строки #0
|
||||
*
|
||||
* @param InStream
|
||||
* @param i
|
||||
* @return
|
||||
* @throws IOException
|
||||
*/
|
||||
public static String readString(DataInputStream InStream, int i) throws IOException
|
||||
{
|
||||
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||
int ch;
|
||||
while (true)
|
||||
{
|
||||
ch = InStream.readUnsignedByte();
|
||||
//System.out.println(ch);
|
||||
ch = ch ^ i; //вот это надо будет потом удалить
|
||||
//System.out.println("xor="+ch);
|
||||
if (ch == 0) break;
|
||||
baos.write(ch);
|
||||
}
|
||||
return baos.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Вернуть расширение файла
|
||||
*
|
||||
* @return расширение
|
||||
*/
|
||||
public static String getExpansion(String fileName)
|
||||
{
|
||||
String exp = "";
|
||||
for (int i = fileName.length() - 1; i > 0; i--)
|
||||
{
|
||||
if (fileName.charAt(i) == '.')
|
||||
{
|
||||
break;
|
||||
} else
|
||||
{
|
||||
exp = fileName.charAt(i) + exp;
|
||||
}
|
||||
}
|
||||
return exp;
|
||||
}
|
||||
|
||||
/**
|
||||
* Вернуть название файла
|
||||
*
|
||||
* @param path - путь
|
||||
* @return
|
||||
*/
|
||||
public static String getFileName(String path)
|
||||
{
|
||||
path = path.replace('\\', '/');
|
||||
int lastSep = path.lastIndexOf('/');
|
||||
return path.substring(lastSep + 1);
|
||||
}
|
||||
|
||||
//узнать точку пересичений 2х линай если x=0 и y=0 то не пересиклась
|
||||
public static Point2D.Float getCrossingLine(Point2D.Float PHead0, Point2D.Float PTail0, Point2D.Float PHead1, Point2D.Float PTail1)
|
||||
{
|
||||
Point2D.Float rezPoint = new Point2D.Float();
|
||||
|
||||
float a0, b0, c0, a1, b1, c1;
|
||||
boolean bRez = true;
|
||||
a0 = PTail0.y - PHead0.y;
|
||||
b0 = PHead0.x - PTail0.x;
|
||||
c0 = PTail0.x * PHead0.y - PHead0.x * PTail0.y;
|
||||
|
||||
a1 = PTail1.y - PHead1.y;
|
||||
b1 = PHead1.x - PTail1.x;
|
||||
c1 = PTail1.x * PHead1.y - PHead1.x * PTail1.y;
|
||||
|
||||
if (b1 == 0) rezPoint.x = PHead1.x;//если перпендикулярна oy
|
||||
else rezPoint.x = (-(b0 * c1 / b1) + c0) / ((b0 * a1 / b1) - a0);
|
||||
if (a1 == 0) rezPoint.y = PHead1.y;//если перпендикулярна oy
|
||||
else rezPoint.y = (-(c1 * a0 / a1) + c0) / ((a0 * b1 / a1) - b0);
|
||||
//проверка на вхождение в отрезоки (с погрешностью 0.0000001)
|
||||
//по x
|
||||
if ((rezPoint.x < Math.min(PHead0.x, PTail0.x) - 0.0000001) || (rezPoint.x > Math.max(PHead0.x, PTail0.x) + 0.0000001))
|
||||
bRez = false;
|
||||
if ((rezPoint.x < Math.min(PHead1.x, PTail1.x) - 0.0000001) || (rezPoint.x > Math.max(PHead1.x, PTail1.x) + 0.0000001))
|
||||
bRez = false;
|
||||
//по y
|
||||
if ((rezPoint.y < Math.min(PHead0.y, PTail0.y) - 0.0000001) || (rezPoint.y > Math.max(PHead0.y, PTail0.y) + 0.0000001))
|
||||
bRez = false;
|
||||
if ((rezPoint.y < Math.min(PHead1.y, PTail1.y) - 0.0000001) || (rezPoint.y > Math.max(PHead1.y, PTail1.y) + 0.0000001))
|
||||
bRez = false;
|
||||
|
||||
if (!bRez)
|
||||
{
|
||||
rezPoint.x = 0;
|
||||
rezPoint.y = 0;
|
||||
}
|
||||
return rezPoint;
|
||||
}
|
||||
|
||||
public class Triangle
|
||||
{
|
||||
int a,b,c;
|
||||
}
|
||||
|
||||
|
||||
public static float getLength(Point2D point1, Point2D point2)
|
||||
{
|
||||
return (float) Math.sqrt((point1.getX() - point2.getX()) * (point1.getX() - point2.getX()) + (point1.getY() - point2.getY()) * (point1.getY() - point2.getY()));
|
||||
}
|
||||
|
||||
/**
|
||||
* узнать градус точки относительно заданного центра(радианы)}
|
||||
*/
|
||||
public static double getAngle(Point2D.Float CenterPoint,Point2D.Float ResearchedPoint)
|
||||
{
|
||||
double A, B, C, Angle;
|
||||
Angle = 0;
|
||||
A = (Math.abs(ResearchedPoint.y - CenterPoint.y) * 1.0); // А И В катеты треугольника
|
||||
B = (Math.abs(ResearchedPoint.x - CenterPoint.x) * 1.0);
|
||||
C = Math.sqrt(A * A + B * B); // С гипотенуза треугольника
|
||||
if (C > 0)
|
||||
{
|
||||
Angle = Math.asin(B / C);
|
||||
|
||||
if ((ResearchedPoint.x > CenterPoint.x) && (ResearchedPoint.y >= CenterPoint.y)) Angle = Math.PI/2 - Angle;
|
||||
else //попрвка на сектора
|
||||
if ((ResearchedPoint.x <= CenterPoint.x) && (ResearchedPoint.y > CenterPoint.y))
|
||||
Angle = Math.PI/2.0 + Angle;
|
||||
else//попрвка на сектора
|
||||
if ((ResearchedPoint.x < CenterPoint.x) && (ResearchedPoint.y <= CenterPoint.y))
|
||||
Angle = 3.0/2.0*Math.PI - Angle;
|
||||
else//попрвка на сектора
|
||||
if ((ResearchedPoint.x >= CenterPoint.x) && (ResearchedPoint.y < CenterPoint.y))
|
||||
Angle = 3.0 / 2.0 * Math.PI + Angle;//попрвка на сектора
|
||||
}
|
||||
return Angle;
|
||||
}
|
||||
|
||||
//узнать уравнение окружности проходящей через 3 точки
|
||||
public static Circle fnCalcCircle(Point2D.Float p1, Point2D.Float p2, Point2D.Float p3)
|
||||
{
|
||||
Circle сircle=new Circle();
|
||||
float a1, b1, a2, b2, c1, c2;
|
||||
float k1, k2;
|
||||
a1 = 2 * (p1.x - p2.x);
|
||||
b1 = 2 * (p2.y - p1.y);
|
||||
c1 = ((p2.y - p1.y) * p2.y + (p2.y - p1.y) * p1.y) - ((p1.x - p2.x) * p1.x + (p1.x - p2.x) * p2.x);
|
||||
a2 = 2 * (p3.x - p2.x);
|
||||
b2 = 2 * (p2.y - p3.y);
|
||||
c2 = ((p2.y - p3.y) * p2.y + (p2.y - p3.y) * p3.y) - ((p3.x - p2.x) * p3.x + (p3.x - p2.x) * p2.x);
|
||||
if (b1 != 0)
|
||||
{
|
||||
k1 = (b2 * a1) / b1 - a2;
|
||||
if (k1 == 0) //3 точки в 1 линии
|
||||
{
|
||||
сircle.r = 0;
|
||||
return сircle;
|
||||
}
|
||||
сircle.cnt.x = ((c2 - (b2 * c1) / b1) / k1);
|
||||
сircle.cnt.y = (c1 + a1 * сircle.cnt.x) / b1;
|
||||
} else if (b2 != 0)
|
||||
{
|
||||
k2 = (b1 * a2) / b2 - a1;
|
||||
if (k2 == 0) //3 точки в 1 линии
|
||||
{
|
||||
сircle.r = 0;
|
||||
return сircle;
|
||||
}
|
||||
сircle.cnt.x = (c1 - (b1 * c2) / b2) / k2;
|
||||
сircle.cnt.y = (c2 + a2 * сircle.cnt.x) / b2;
|
||||
} else
|
||||
{ //всё в ё точке
|
||||
сircle.r = 0;
|
||||
}
|
||||
сircle.r = (float) Math.sqrt((сircle.cnt.x - p1.x) * (сircle.cnt.x - p1.x) + (сircle.cnt.y - p1.y) * (сircle.cnt.y - p1.y));
|
||||
return сircle;
|
||||
}
|
||||
|
||||
}
|
||||
47
src/tools/xml/XMLIO.java
Normal file
47
src/tools/xml/XMLIO.java
Normal file
@ -0,0 +1,47 @@
|
||||
package tools.xml;
|
||||
|
||||
import org.w3c.dom.Document;
|
||||
import org.xml.sax.SAXException;
|
||||
|
||||
import javax.xml.parsers.ParserConfigurationException;
|
||||
import javax.xml.parsers.DocumentBuilderFactory;
|
||||
import javax.xml.transform.TransformerException;
|
||||
import javax.xml.transform.TransformerFactory;
|
||||
import javax.xml.transform.stream.StreamResult;
|
||||
import javax.xml.transform.dom.DOMSource;
|
||||
import java.io.*;
|
||||
|
||||
/**
|
||||
* Created by IntelliJ IDEA.
|
||||
* User: Igor
|
||||
* Date: 18.12.2005
|
||||
* Time: 15:27:36
|
||||
* To change this template use File | Settings | File Templates.
|
||||
*/
|
||||
public class XMLIO
|
||||
{
|
||||
public static Document newDocument() throws ParserConfigurationException
|
||||
{
|
||||
return DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
|
||||
}
|
||||
|
||||
public static Document load(InputStream is) throws ParserConfigurationException, IOException, SAXException
|
||||
{
|
||||
return DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(is);
|
||||
}
|
||||
|
||||
public static Document load(String filename) throws ParserConfigurationException, IOException, SAXException
|
||||
{
|
||||
return DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new File(filename));
|
||||
}
|
||||
|
||||
public static void save(String filename, Document document) throws TransformerException, FileNotFoundException
|
||||
{
|
||||
save(new FileOutputStream(filename), document);
|
||||
}
|
||||
|
||||
public static void save(OutputStream out, Document document) throws TransformerException
|
||||
{
|
||||
TransformerFactory.newInstance().newTransformer().transform(new DOMSource(document), new StreamResult(out));
|
||||
}
|
||||
}
|
||||
127
src/tools/xml/XMLTools.java
Normal file
127
src/tools/xml/XMLTools.java
Normal file
@ -0,0 +1,127 @@
|
||||
package tools.xml;
|
||||
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Element;
|
||||
import org.w3c.dom.Node;
|
||||
import org.w3c.dom.NodeList;
|
||||
import org.w3c.dom.ls.DOMImplementationLS;
|
||||
import org.w3c.dom.ls.LSSerializer;
|
||||
import org.xml.sax.SAXException;
|
||||
|
||||
import javax.xml.parsers.ParserConfigurationException;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
|
||||
/**
|
||||
* Created by IntelliJ IDEA.
|
||||
* User: Igor
|
||||
* Date: 18.12.2005
|
||||
* Time: 15:26:59
|
||||
* To change this template use File | Settings | File Templates.
|
||||
*/
|
||||
public class XMLTools
|
||||
{
|
||||
public static Document parse(String xmlString) throws IOException, ParserConfigurationException, SAXException
|
||||
{
|
||||
return XMLIO.load(new ByteArrayInputStream(xmlString.getBytes()));
|
||||
}
|
||||
public static Document parse(InputStream xmlString) throws IOException, ParserConfigurationException, SAXException
|
||||
{
|
||||
return XMLIO.load(xmlString);
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает вложенный элемент "childName" элемента "parent" <br/>
|
||||
* <element><childName/></element>
|
||||
* @param parent
|
||||
* @param childName
|
||||
* @return Дочерный элемент либо <code>null</code>, если элементов с таким именем нет
|
||||
*/
|
||||
public static Element getChild(Element parent, String childName){
|
||||
NodeList nl = parent.getChildNodes();
|
||||
for (int i = 0; i <nl.getLength(); i++) {
|
||||
if (isElement(nl.item(i), childName)){
|
||||
return (Element)nl.item(i);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Проверяет, является ли <code>node</code> элементом (<code>instanceOf {@link Element}</code>)
|
||||
* и имеет ли имя "tagname"
|
||||
* @param node
|
||||
* @param tagname
|
||||
* @return
|
||||
*/
|
||||
public static boolean isElement(Node node, String tagname){
|
||||
return node instanceof Element && node.getNodeName().equals(tagname);
|
||||
}
|
||||
|
||||
//вернуть первый попавшийся узел среди дочерних
|
||||
public static Node getFirstNodeOnName(Node node,String nodename)
|
||||
{
|
||||
Node[] mas=new Node[50]; //depth
|
||||
int pos=0;
|
||||
mas[pos] = node.getFirstChild();
|
||||
while (mas[pos] != null)
|
||||
{
|
||||
if(mas[pos].getNodeName().equals(nodename))
|
||||
{
|
||||
return mas[pos];
|
||||
}
|
||||
if(mas[pos].getFirstChild()!=null)
|
||||
{
|
||||
pos++;
|
||||
mas[pos]=mas[pos-1].getFirstChild();
|
||||
}else
|
||||
{
|
||||
//если не идёт дальше пытаемся подняться в верх по дереву
|
||||
while (true)
|
||||
{
|
||||
mas[pos] = mas[pos].getNextSibling();
|
||||
if (mas[pos]==null)
|
||||
{
|
||||
if(pos>0){ pos--; }else{ break; }
|
||||
}else
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return first from childs in first deep level on name
|
||||
* @param node Find in
|
||||
* @param nodename Name node
|
||||
* @return node
|
||||
*/
|
||||
public static Node getNodeOnName(Node node,String nodename)
|
||||
{
|
||||
if(node==null) return null;
|
||||
Node nextNode = node.getFirstChild();
|
||||
while(nextNode != null)
|
||||
{
|
||||
if(nextNode.getNodeName().equals(nodename)) return nextNode;
|
||||
nextNode=nextNode.getNextSibling();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
//Сериализовать узел в строку
|
||||
public static String getOuterXML(Node node)
|
||||
{
|
||||
DOMImplementationLS domImplementation = (DOMImplementationLS) node.getOwnerDocument().getImplementation();
|
||||
LSSerializer lsSerializer = domImplementation.createLSSerializer();
|
||||
if (!(node instanceof Document))
|
||||
{
|
||||
lsSerializer.getDomConfig().setParameter("xml-declaration", false);
|
||||
}
|
||||
return lsSerializer.writeToString(node);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user