Rework source structure to separate swing gui code from core code.

Separate swing application code from core code.  Moved a bunch of sources
and libraries around.  Created new eclipse project.

Further refinements to make it build.

Update gitignore.
This commit is contained in:
kruland2607 2013-09-27 10:10:38 -05:00
parent f300c3a6be
commit 26fb295554
461 changed files with 862 additions and 400 deletions

6
.gitignore vendored
View File

@ -37,9 +37,3 @@
/core/resources-src/pix/sormus.xcf.gz
/core/resources-src/pix/splashscreen-sormus.png
/core/resources-src/pix/splashscreen-sormus.xcf.gz
<<<<<<< HEAD
/*/bin/
/android-libraries/*/bin/
=======
>>>>>>> Convert svn:ignore properties to .gitignore.

View File

@ -10,8 +10,6 @@
</accessrules>
</classpathentry>
<classpathentry kind="lib" path="lib-extra/RXTXcomm.jar"/>
<classpathentry kind="lib" path="lib/miglayout15-swing.jar"/>
<classpathentry kind="lib" path="lib/iText-5.0.2.jar"/>
<classpathentry kind="lib" path="lib-test/hamcrest-core-1.3.0RC1.jar"/>
<classpathentry kind="lib" path="lib-test/hamcrest-library-1.3.0RC1.jar"/>
<classpathentry kind="lib" path="lib-test/jmock-2.6.0-RC2.jar"/>
@ -20,19 +18,12 @@
<classpathentry kind="lib" path="lib-test/uispec4j-2.3-jdk16.jar"/>
<classpathentry kind="lib" path="resources"/>
<classpathentry kind="lib" path="lib/opencsv-2.3.jar"/>
<classpathentry kind="lib" path="lib/OrangeExtensions-1.2.jar"/>
<classpathentry kind="lib" path="lib/guice-3.0.jar"/>
<classpathentry kind="lib" path="lib/guice-multibindings-3.0.jar"/>
<classpathentry kind="lib" path="lib/javax.inject.jar"/>
<classpathentry kind="lib" path="lib/aopalliance.jar"/>
<classpathentry kind="lib" path="lib/jogl/gluegen-rt.jar" sourcepath="reference/gluegen-v2.0-rc11-sources.jar"/>
<classpathentry kind="lib" path="lib/jogl/jogl-all.jar" sourcepath="reference/jogl-all-2.0.2-sources.jar"/>
<classpathentry kind="lib" path="lib-test/test-plugin.jar"/>
<classpathentry kind="lib" path="lib/annotation-detector-3.0.2-SNAPSHOT.jar"/>
<classpathentry kind="lib" path="lib/logback-classic-1.0.12.jar" sourcepath="reference/logback-classic-1.0.12-sources.jar"/>
<classpathentry kind="lib" path="lib/logback-core-1.0.12.jar" sourcepath="reference/logback-core-1.0.12-sources.jar"/>
<classpathentry kind="lib" path="lib/slf4j-api-1.7.5.jar"/>
<classpathentry kind="lib" path="lib/jcommon-1.0.18.jar"/>
<classpathentry kind="lib" path="lib/jfreechart-1.0.15.jar" sourcepath="reference/jfreechart-1.0.15-sources.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>

View File

@ -1,4 +1,4 @@
<project name="OpenRocket" basedir=".">
<project name="OpenRocket-Core" basedir=".">
<property file="resources/build.properties" />
@ -23,14 +23,6 @@
<property name="pkgname" value="${ant.project.name}-${build.version}"/>
<property name="jar.file" value="${jar.dir}/${ant.project.name}.jar"/>
<property name="dist.bin" value="${jar.dir}/${pkgname}.jar"/>
<property name="dist.src" value="${jar.dir}/${pkgname}-src.zip"/>
<!-- The main class of the application -->
<property name="main-class" value="net.sf.openrocket.startup.Startup"/>
<property name="expanded-libs" value="${lib.dir}/miglayout15-swing.jar"/>
<!-- Classpath definitions -->
<path id="classpath">
<fileset dir="${lib.dir}" includes="**/*.jar"/>
@ -51,13 +43,6 @@
<pathelement location="${classes.dir}"/>
</path>
<!-- Add Ant-contrib tasks so we can use for loop -->
<taskdef resource="net/sf/antcontrib/antlib.xml">
<classpath>
<pathelement location="${libextra.dir}/ant-contrib-1.0b3.jar"/>
</classpath>
</taskdef>
<!-- CLEAN -->
<target name="clean" description="Removes all build artifacts">
@ -74,56 +59,20 @@
</target>
<!-- Executible Eclipse-Jar-In-Jar style JAR -->
<target name="jar" depends="build,serialize-presets,serialize-motors" description="Create the OpenRocket executable JAR">
<target name="jar" depends="build,serialize-motors" description="Create the OpenRocket Core">
<mkdir dir="${jar.dir}" />
<jar destfile="${jar.file}" basedir="${dist.dir}">
<manifest>
<attribute name="Main-Class" value="${main-class}" />
<attribute name="SplashScreen-Image" value="pix/splashscreen.png" />
<attribute name="Classpath-Jars" value="lib/gluegen-rt.jar lib/jogl-all.jar" />
</manifest>
<!-- Include, in the root of the JAR, the resources needed by OR -->
<fileset dir="${src.dir}/" includes="META-INF/,logback.xml" />
<fileset dir="${resources.dir}/" />
<!-- Libraries to extract into base JAR -->
<zipfileset src="${lib.dir}/miglayout15-swing.jar" />
<zipfileset src="${lib.dir}/guice-3.0.jar" />
<zipfileset src="${lib.dir}/aopalliance.jar"/>
<zipfileset src="${lib.dir}/guice-3.0.jar"/>
<zipfileset src="${lib.dir}/guice-multibindings-3.0.jar"/>
<zipfileset src="${lib.dir}/iText-5.0.2.jar"/>
<zipfileset src="${lib.dir}/javax.inject.jar"/>
<zipfileset src="${lib.dir}/jcommon-1.0.18.jar"/>
<zipfileset src="${lib.dir}/jfreechart-1.0.15.jar"/>
<zipfileset src="${lib.dir}/miglayout15-swing.jar"/>
<zipfileset src="${lib.dir}/opencsv-2.3.jar"/>
<zipfileset src="${lib.dir}/OrangeExtensions-1.2.jar"/>
<zipfileset src="${lib.dir}/annotation-detector-3.0.2-SNAPSHOT.jar"/>
<zipfileset src="${lib.dir}/slf4j-api-1.7.5.jar"/>
<zipfileset src="${lib.dir}/logback-classic-1.0.12.jar"/>
<zipfileset src="${lib.dir}/logback-core-1.0.12.jar"/>
<!-- JOGL libraries need to be jar-in-jar -->
<zipfileset dir="${lib.dir}/jogl" prefix="lib">
<include name="*.jar"/>
</zipfileset>
<!-- Include metafiles about OR -->
<fileset dir="${basedir}" includes="LICENSE.TXT README.TXT ChangeLog ReleaseNotes fileformat.txt" />
</jar>
</target>
<target name="serialize-presets" depends="build" description="Preprocess the orc preset files into serialized form">
<java classname="net.sf.openrocket.utils.SerializePresets"
fork="true"
classpathref="run-classpath"
failonerror="true">
</java>
</target>
<target name="serialize-motors" depends="build" description="Preprocess the motor files into serialized form">
<java classname="net.sf.openrocket.utils.SerializeMotors"
fork="true"
@ -134,86 +83,6 @@
</java>
</target>
<!-- CONVERT vendor csv to ORC files -->
<macrodef name="build-orc-file">
<attribute name="dir"/>
<attribute name="vendor"/>
<sequential>
<echo>Generating ORC file for vendor @{vendor}</echo>
<java classname="net.sf.openrocket.preset.loader.RocksimComponentFileTranslator"
fork="true"
classpathref="run-classpath"
failonerror="true">
<arg value="@{dir}"/>
<arg value="${resources-src.dir}/datafiles/presets/@{vendor}.orc"/>
</java>
</sequential>
</macrodef>
<target name="generate-orc-files"
description="Generate ORC file from vendor csv"
depends="build">
<for param="vendor-dir">
<dirset dir="${resources-src.dir}/datafiles/rocksim_components"
includes="*"/>
<sequential>
<propertyregex property="vendor"
override="true"
input="@{vendor-dir}"
select="\1"
regexp=".*[/\\]([^/\\]*)$"/>
<build-orc-file dir="@{vendor-dir}" vendor="${vendor}"/>
</sequential>
</for>
</target>
<!-- DIST-SRC -->
<target name="dist-src">
<echo>
Building source distribution
</echo>
<mkdir dir="${build.dir}/${pkgname}"/>
<mkdir dir="${jar.dir}"/>
<copy todir="${build.dir}/${pkgname}">
<fileset dir="${basedir}" includes="*" excludes="*.log">
<type type="file"/>
</fileset>
<fileset dir="${basedir}" includes="resources/ lib/ lib-test/ src/ test/ resources-src/datafiles/"/>
</copy>
<zip destfile="${dist.src}" basedir="${build.dir}" includes="${pkgname}/"/>
<delete dir="${build.dir}/${pkgname}"/>
</target>
<!-- DIST-SRC-TEST -->
<target name="dist-src-test" depends="dist-src">
<echo>
Testing source distribution
</echo>
<delete dir="${dist-test.dir}"/>
<mkdir dir="${dist-test.dir}"/>
<unzip dest="${dist-test.dir}" src="${dist.src}"/>
<ant dir="${dist-test.dir}/${pkgname}" antfile="build.xml" target="jar"/>
<ant dir="${dist-test.dir}/${pkgname}" antfile="build.xml" target="unittest"/>
<delete dir="${dist-test.dir}"/>
<echo>
Source distribution test successful
</echo>
</target>
<!-- DIST-BIN -->
<target name="dist-bin" depends="check,clean,unittest,jar">
<move file="${jar.file}" tofile="${dist.bin}"/>
</target>
<!-- DIST -->
<target name="dist" depends="dist-bin,dist-src,dist-src-test">
<echo>Distribution ${build.version} (${build.source}) built into directory ${jar.dir}</echo>
</target>
<!-- CHECK -->
<target name="check" depends="checktodo,checkascii"/>

View File

@ -1,7 +1,12 @@
package net.sf.openrocket.file.rocksim.export;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import net.sf.openrocket.file.rocksim.RocksimCommonConstants;
import net.sf.openrocket.gui.configdialog.InnerTubeConfig;
import net.sf.openrocket.rocketcomponent.BodyTube;
import net.sf.openrocket.rocketcomponent.Bulkhead;
import net.sf.openrocket.rocketcomponent.CenteringRing;
@ -15,11 +20,6 @@ import net.sf.openrocket.rocketcomponent.Transition;
import net.sf.openrocket.rocketcomponent.TubeCoupler;
import net.sf.openrocket.util.Coordinate;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.List;
/**
* This class models the XML element for a Rocksim inside tube.
*/
@ -104,10 +104,10 @@ public class InnerBodyTubeDTO extends BodyTubeDTO implements AttachableParts {
*/
private void handleCluster(InnerTube it, AttachableParts p) {
Coordinate[] coords = {Coordinate.NUL};
Coordinate[] coords = { Coordinate.NUL };
coords = it.shiftCoordinates(coords);
for (int x = 0; x < coords.length; x++) {
InnerTube partialClone = InnerTubeConfig.makeIndividualClusterComponent(coords[x], it.getName() + " #" + (x + 1), it);
InnerTube partialClone = InnerTube.makeIndividualClusterComponent(coords[x], it.getName() + " #" + (x + 1), it);
p.addAttachedPart(new InnerBodyTubeDTO(partialClone, p));
}
}

View File

@ -1,13 +1,5 @@
package net.sf.openrocket.preset.loader;
import au.com.bytecode.opencsv.CSVReader;
import net.sf.openrocket.gui.print.PrintUnit;
import net.sf.openrocket.preset.TypedPropertyMap;
import net.sf.openrocket.unit.Unit;
import net.sf.openrocket.unit.UnitGroup;
import net.sf.openrocket.util.ArrayList;
import net.sf.openrocket.util.StringUtil;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
@ -17,6 +9,13 @@ import java.io.InputStreamReader;
import java.io.PrintStream;
import java.util.List;
import net.sf.openrocket.preset.TypedPropertyMap;
import net.sf.openrocket.unit.Unit;
import net.sf.openrocket.unit.UnitGroup;
import net.sf.openrocket.util.ArrayList;
import net.sf.openrocket.util.StringUtil;
import au.com.bytecode.opencsv.CSVReader;
/**
* Primary entry point for parsing component CSV files that are in Rocksim format.
*/
@ -55,8 +54,8 @@ public abstract class RocksimComponentFileLoader {
public void load() {
try {
load(getFileType());
} catch (FileNotFoundException fex ) {
LOGGER.println( fex.getLocalizedMessage() );
} catch (FileNotFoundException fex) {
LOGGER.println(fex.getLocalizedMessage());
}
}
@ -134,15 +133,12 @@ public abstract class RocksimComponentFileLoader {
}
//Read the rest of the file as data rows.
return;
}
catch (IOException e) {
}
finally {
} catch (IOException e) {
} finally {
if (r != null) {
try {
r.close();
}
catch (IOException e) {
} catch (IOException e) {
}
}
}
@ -207,10 +203,10 @@ public abstract class RocksimComponentFileLoader {
*/
protected static double convertLength(String units, double value) {
if (isInches(units)) {
return PrintUnit.INCHES.toMeters(value);
return UnitGroup.UNITS_LENGTH.getUnit("in").fromUnit(value);
}
else {
return PrintUnit.MILLIMETERS.toMeters(value);
return UnitGroup.UNITS_LENGTH.getUnit("mm").fromUnit(value);
}
}

View File

@ -309,6 +309,25 @@ public class InnerTube extends ThicknessRingComponent implements Clusterable, Ra
return copy;
}
/**
* For a given coordinate that represents one tube in a cluster, create an instance of that tube. Must be called
* once for each tube in the cluster.
*
* @param coord the coordinate of the clustered tube to create
* @param splitName the name of the individual tube
* @param theInnerTube the 'parent' from which this tube will be created.
*
* @return an instance of an inner tube that represents ONE of the clustered tubes in the cluster represented
* by <code>theInnerTube</code>
*/
public static InnerTube makeIndividualClusterComponent(Coordinate coord, String splitName, RocketComponent theInnerTube) {
InnerTube copy = (InnerTube) theInnerTube.copy();
copy.setClusterConfiguration(ClusterConfiguration.SINGLE);
copy.setClusterRotation(0.0);
copy.setClusterScale(1.0);
copy.setRadialShift(coord.y, coord.z);
copy.setName(splitName);
return copy;
}
}

View File

@ -0,0 +1,155 @@
package net.sf.openrocket;
import java.util.Collections;
import java.util.Locale;
import java.util.Set;
import java.util.concurrent.atomic.AtomicReference;
import net.sf.openrocket.formatting.RocketDescriptor;
import net.sf.openrocket.formatting.RocketDescriptorImpl;
import net.sf.openrocket.l10n.DebugTranslator;
import net.sf.openrocket.l10n.ResourceBundleTranslator;
import net.sf.openrocket.l10n.Translator;
import net.sf.openrocket.material.Material;
import net.sf.openrocket.preset.ComponentPreset;
import net.sf.openrocket.preset.ComponentPreset.Type;
import net.sf.openrocket.startup.Preferences;
import com.google.inject.AbstractModule;
import com.google.inject.Provider;
public class ServicesForTesting extends AbstractModule {
@Override
protected void configure() {
bind(Preferences.class).to(PreferencesForTesting.class);
bind(Translator.class).toProvider(TranslatorProviderForTesting.class);
bind(RocketDescriptor.class).to(RocketDescriptorImpl.class);
}
public static class TranslatorProviderForTesting implements Provider<Translator> {
private AtomicReference<Translator> translator = new AtomicReference<Translator>();
@Override
public Translator get() {
Translator oldTranslator = translator.get();
if (oldTranslator != null) {
return oldTranslator;
}
Locale.setDefault(Locale.US);
// Setup the translator
Translator newTranslator;
newTranslator = new ResourceBundleTranslator("l10n.messages");
if (Locale.getDefault().getLanguage().equals("xx")) {
newTranslator = new DebugTranslator(newTranslator);
}
if (translator.compareAndSet(null, newTranslator)) {
return newTranslator;
} else {
return translator.get();
}
}
}
public static class PreferencesForTesting extends Preferences {
@Override
public boolean getBoolean(String key, boolean defaultValue) {
// TODO Auto-generated method stub
return false;
}
@Override
public void putBoolean(String key, boolean value) {
// TODO Auto-generated method stub
}
@Override
public int getInt(String key, int defaultValue) {
// TODO Auto-generated method stub
return 0;
}
@Override
public void putInt(String key, int value) {
// TODO Auto-generated method stub
}
@Override
public double getDouble(String key, double defaultValue) {
// TODO Auto-generated method stub
return 0;
}
@Override
public void putDouble(String key, double value) {
// TODO Auto-generated method stub
}
@Override
public String getString(String key, String defaultValue) {
// TODO Auto-generated method stub
return null;
}
@Override
public void putString(String key, String value) {
// TODO Auto-generated method stub
}
@Override
public String getString(String directory, String key, String defaultValue) {
// TODO Auto-generated method stub
return null;
}
@Override
public void putString(String directory, String key, String value) {
// TODO Auto-generated method stub
}
@Override
public void addUserMaterial(Material m) {
// TODO Auto-generated method stub
}
@Override
public Set<Material> getUserMaterials() {
return Collections.<Material> emptySet();
}
@Override
public void removeUserMaterial(Material m) {
// TODO Auto-generated method stub
}
@Override
public void setComponentFavorite(ComponentPreset preset, Type type, boolean favorite) {
// TODO Auto-generated method stub
}
@Override
public Set<String> getComponentFavorites(Type type) {
// TODO Auto-generated method stub
return null;
}
}
}

View File

@ -13,7 +13,7 @@ import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import net.sf.openrocket.IntegrationTest;
import net.sf.openrocket.ServicesForTesting;
import net.sf.openrocket.database.ComponentPresetDao;
import net.sf.openrocket.database.ComponentPresetDatabase;
import net.sf.openrocket.database.motor.MotorDatabase;
@ -30,7 +30,6 @@ import net.sf.openrocket.motor.ThrustCurveMotor;
import net.sf.openrocket.plugin.PluginModule;
import net.sf.openrocket.startup.Application;
import net.sf.openrocket.util.TestRockets;
import net.sf.openrocket.utils.CoreServicesModule;
import org.junit.After;
import org.junit.BeforeClass;
@ -50,7 +49,7 @@ public class OpenRocketSaverTest {
@BeforeClass
public static void setup() {
Module applicationModule = new CoreServicesModule();
Module applicationModule = new ServicesForTesting();
Module pluginModule = new PluginModule();
Module dbOverrides = new AbstractModule() {
@ -307,7 +306,7 @@ public class OpenRocketSaverTest {
private static ThrustCurveMotor readMotor() {
GeneralMotorLoader loader = new GeneralMotorLoader();
InputStream is = IntegrationTest.class.getResourceAsStream("Estes_A8.rse");
InputStream is = OpenRocketSaverTest.class.getResourceAsStream("/net/sf/openrocket/Estes_A8.rse");
assertNotNull("Problem in unit test, cannot find Estes_A8.rse", is);
try {
for (Motor m : loader.load(is, "Estes_A8.rse")) {

View File

@ -1,6 +1,6 @@
package net.sf.openrocket.plugin;
import net.sf.openrocket.utils.CoreServicesModule;
import net.sf.openrocket.ServicesForTesting;
import org.junit.Test;
@ -20,7 +20,7 @@ public class PluginTest {
@Test
public void testPluginModule() {
Module applicationModule = new CoreServicesModule();
Module applicationModule = new ServicesForTesting();
Injector injector = Guice.createInjector(applicationModule, new PluginModule());
PluginTester tester = injector.getInstance(PluginTester.class);

View File

@ -4,10 +4,9 @@ import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.awt.Color;
import java.util.Iterator;
import net.sf.openrocket.gui.util.ColorConversion;
import net.sf.openrocket.util.Color;
import net.sf.openrocket.util.Coordinate;
import net.sf.openrocket.util.BaseTestCase.BaseTestCase;
@ -41,7 +40,7 @@ public class ComponentCompareTest extends BaseTestCase {
ComponentCompare.assertDeepSimilarity(r1, r2, false);
r1.setColor(ColorConversion.fromAwtColor(Color.YELLOW));
r1.setColor(Color.BLACK);
try {
ComponentCompare.assertEquality(r1, r2);
fail();

View File

@ -3,16 +3,13 @@ package net.sf.openrocket.rocketcomponent;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.awt.Color;
import net.sf.openrocket.gui.util.ColorConversion;
import net.sf.openrocket.material.Material;
import net.sf.openrocket.material.Material.Type;
import net.sf.openrocket.rocketcomponent.ExternalComponent.Finish;
import net.sf.openrocket.rocketcomponent.FinSet.CrossSection;
import net.sf.openrocket.rocketcomponent.FinSet.TabRelativePosition;
import net.sf.openrocket.rocketcomponent.RocketComponent.Position;
import net.sf.openrocket.util.Color;
import net.sf.openrocket.util.Coordinate;
import net.sf.openrocket.util.LineStyle;
import net.sf.openrocket.util.BaseTestCase.BaseTestCase;
@ -68,10 +65,10 @@ public class FinSetTest extends BaseTestCase {
FreeformFinSet fins = new FreeformFinSet();
fins.setFinCount(1);
Coordinate[] points = new Coordinate[] {
new Coordinate(0,0),
new Coordinate(0,1),
new Coordinate(.5,1),
new Coordinate(1,0)
new Coordinate(0, 0),
new Coordinate(0, 1),
new Coordinate(.5, 1),
new Coordinate(1, 0)
};
fins.setPoints(points);
Coordinate coords = fins.getCG();
@ -86,13 +83,13 @@ public class FinSetTest extends BaseTestCase {
FreeformFinSet fins = new FreeformFinSet();
fins.setFinCount(1);
Coordinate[] points = new Coordinate[] {
new Coordinate(0,0),
new Coordinate(0,.5),
new Coordinate(0,1),
new Coordinate(.25,1),
new Coordinate(.5,1),
new Coordinate(.75,.5),
new Coordinate(1,0)
new Coordinate(0, 0),
new Coordinate(0, .5),
new Coordinate(0, 1),
new Coordinate(.25, 1),
new Coordinate(.5, 1),
new Coordinate(.75, .5),
new Coordinate(1, 0)
};
fins.setPoints(points);
Coordinate coords = fins.getCG();
@ -109,14 +106,14 @@ public class FinSetTest extends BaseTestCase {
FreeformFinSet fins = new FreeformFinSet();
fins.setFinCount(1);
Coordinate[] points = new Coordinate[] {
new Coordinate(0,0),
new Coordinate(0,1E-15),
new Coordinate(0,1),
new Coordinate(1E-15,1),
new Coordinate(.5,1),
new Coordinate(.5,1-1E-15),
new Coordinate(1,1E-15),
new Coordinate(1,0)
new Coordinate(0, 0),
new Coordinate(0, 1E-15),
new Coordinate(0, 1),
new Coordinate(1E-15, 1),
new Coordinate(.5, 1),
new Coordinate(.5, 1 - 1E-15),
new Coordinate(1, 1E-15),
new Coordinate(1, 0)
};
fins.setPoints(points);
Coordinate coords = fins.getCG();
@ -151,18 +148,18 @@ public class FinSetTest extends BaseTestCase {
FreeformFinSet fins = new FreeformFinSet();
fins.setFinCount(1);
Coordinate[] points = new Coordinate[] {
new Coordinate(0,0),
new Coordinate(0,1),
new Coordinate(2,1),
new Coordinate(2,-1),
new Coordinate(1,-1),
new Coordinate(1,0)
new Coordinate(0, 0),
new Coordinate(0, 1),
new Coordinate(2, 1),
new Coordinate(2, -1),
new Coordinate(1, -1),
new Coordinate(1, 0)
};
fins.setPoints(points);
Coordinate coords = fins.getCG();
assertEquals(3.0, fins.getFinArea(), 0.001);
assertEquals(3.5/3.0, coords.x, 0.001);
assertEquals(0.5/3.0, coords.y, 0.001);
assertEquals(3.5 / 3.0, coords.x, 0.001);
assertEquals(0.5 / 3.0, coords.y, 0.001);
}
@ -182,7 +179,7 @@ public class FinSetTest extends BaseTestCase {
fin.setBaseRotation(1.1);
fin.setCantAngle(0.001);
fin.setCGOverridden(true);
fin.setColor(ColorConversion.fromAwtColor(Color.YELLOW));
fin.setColor(Color.BLACK);
fin.setComment("cmt");
fin.setCrossSection(CrossSection.ROUNDED);
fin.setFinCount(5);

View File

@ -1,10 +1,10 @@
package net.sf.openrocket.util.BaseTestCase;
import net.sf.openrocket.ServicesForTesting;
import net.sf.openrocket.l10n.DebugTranslator;
import net.sf.openrocket.l10n.Translator;
import net.sf.openrocket.plugin.PluginModule;
import net.sf.openrocket.startup.Application;
import net.sf.openrocket.utils.CoreServicesModule;
import org.junit.BeforeClass;
@ -18,7 +18,7 @@ public class BaseTestCase {
@BeforeClass
public static void setUp() throws Exception {
Module applicationModule = new CoreServicesModule();
Module applicationModule = new ServicesForTesting();
Module debugTranslator = new AbstractModule() {
@Override

23
swing/.classpath Normal file
View File

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="lib" path="lib/jogl/jogl-all.jar"/>
<classpathentry kind="lib" path="lib/iText-5.0.2.jar"/>
<classpathentry kind="lib" path="lib/jcommon-1.0.18.jar"/>
<classpathentry kind="lib" path="lib/jfreechart-1.0.15.jar"/>
<classpathentry kind="lib" path="lib/miglayout15-swing.jar"/>
<classpathentry kind="lib" path="lib/OrangeExtensions-1.2.jar"/>
<classpathentry kind="lib" path="lib/jogl/gluegen-rt.jar"/>
<classpathentry combineaccessrules="false" kind="src" path="/OpenRocket Core"/>
<classpathentry kind="lib" path="/OpenRocket Core/lib/slf4j-api-1.7.5.jar"/>
<classpathentry kind="lib" path="/OpenRocket Core/lib/annotation-detector-3.0.2-SNAPSHOT.jar"/>
<classpathentry kind="lib" path="/OpenRocket Core/lib/aopalliance.jar"/>
<classpathentry kind="lib" path="/OpenRocket Core/lib/guice-3.0.jar"/>
<classpathentry kind="lib" path="/OpenRocket Core/lib/guice-multibindings-3.0.jar"/>
<classpathentry kind="lib" path="/OpenRocket Core/lib/javax.inject.jar"/>
<classpathentry kind="lib" path="/OpenRocket Core/lib/opencsv-2.3.jar"/>
<classpathentry kind="lib" path="lib/logback-classic-1.0.12.jar"/>
<classpathentry kind="lib" path="lib/logback-core-1.0.12.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>

2
swing/.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
/build
/bin

17
swing/.project Normal file
View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>OpenRocket Swing</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>

View File

@ -0,0 +1,89 @@
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
org.eclipse.jdt.core.compiler.problem.comparingIdentical=error
org.eclipse.jdt.core.compiler.problem.deadCode=warning
org.eclipse.jdt.core.compiler.problem.deprecation=warning
org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore
org.eclipse.jdt.core.compiler.problem.fallthroughCase=error
org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
org.eclipse.jdt.core.compiler.problem.noEffectAssignment=error
org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
org.eclipse.jdt.core.compiler.problem.nullReference=warning
org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=error
org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore
org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
org.eclipse.jdt.core.compiler.problem.unusedImport=warning
org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore
org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning

331
swing/build.xml Normal file
View File

@ -0,0 +1,331 @@
<project name="OpenRocket" basedir=".">
<property file="resources/build.properties" />
<property name="src.dir" value="${basedir}/src"/> <!-- Source directory -->
<property name="src-test.dir" value="${basedir}/test"/> <!-- Test directory -->
<property name="build.dir" value="${basedir}/build"/> <!-- Build directory -->
<property name="build-test.dir" value="${basedir}/build/test"/> <!-- Build directory -->
<property name="lib.dir" value="${basedir}/lib"/> <!-- Library source directory -->
<property name="libtest.dir" value="${basedir}/lib-test"/> <!-- Library test source directory -->
<property name="libextra.dir" value="${basedir}/lib-extra"/> <!-- Library extra source directory -->
<property name="tmp.dir" value="${basedir}/tmp"/> <!-- Temporary directory -->
<property name="resources.dir" value="${basedir}/resources"/> <!-- Resources directory -->
<property name="resources-src.dir" value="${basedir}/resources-src"/>
<property name="core.dir" value="${basedir}/../core"/>
<!-- Distribution directory, from which stuff is jar'ed -->
<property name="classes.dir" value="${build.dir}/classes"/>
<property name="dist-test.dir" value="${build.dir}/dist-test"/>
<property name="jar.dir" value="${build.dir}/jar"/> <!-- Directory for built jar's -->
<property name="pkgname" value="${ant.project.name}-${build.version}"/>
<property name="jar.file" value="${jar.dir}/${ant.project.name}.jar"/>
<property name="dist.bin" value="${jar.dir}/${pkgname}.jar"/>
<property name="dist.src" value="${jar.dir}/${pkgname}-src.zip"/>
<!-- The main class of the application -->
<property name="main-class" value="net.sf.openrocket.startup.Startup"/>
<property name="expanded-libs" value="${lib.dir}/miglayout15-swing.jar"/>
<!-- Classpath definitions -->
<path id="classpath">
<fileset dir="${lib.dir}" includes="**/*.jar"/>
<fileset dir="${core.dir}/build/jar" includes="OpenRocket-Core.jar"/>
<fileset dir="${core.dir}/lib" includes="**/*.jar"/>
</path>
<path id="test-classpath">
<path refid="classpath"/>
<pathelement location="${resources.dir}"/>
<pathelement location="${build-test.dir}"/>
<pathelement location="${classes.dir}"/>
<pathelement location="${src-test.dir}"/>
<fileset dir="${libtest.dir}/" includes="*.jar"/>
</path>
<path id="run-classpath">
<path refid="classpath"/>
<pathelement location="${resources.dir}"/>
<pathelement location="${classes.dir}"/>
</path>
<!-- Add Ant-contrib tasks so we can use for loop -->
<taskdef resource="net/sf/antcontrib/antlib.xml">
<classpath>
<pathelement location="${libextra.dir}/ant-contrib-1.0b3.jar"/>
</classpath>
</taskdef>
<!-- CLEAN -->
<target name="clean" description="Removes all build artifacts">
<delete dir="${build.dir}"/>
<delete dir="${tmp.dir}/"/>
</target>
<!-- BUILD -->
<target name="build">
<mkdir dir="${classes.dir}"/>
<echo level="info">Compiling main classes</echo>
<javac debug="true" srcdir="${src.dir}" destdir="${classes.dir}" classpathref="classpath" includeantruntime="false" source="1.6" target="1.6"/>
</target>
<!-- Executible Eclipse-Jar-In-Jar style JAR -->
<target name="jar" depends="build,serialize-presets" description="Create the OpenRocket executable JAR">
<mkdir dir="${jar.dir}" />
<jar destfile="${jar.file}" basedir="${classes.dir}">
<manifest>
<attribute name="Main-Class" value="${main-class}" />
<attribute name="SplashScreen-Image" value="pix/splashscreen.png" />
<attribute name="Classpath-Jars" value="lib/gluegen-rt.jar lib/jogl-all.jar" />
</manifest>
<!-- Include, in the root of the JAR, the resources needed by OR -->
<fileset dir="${src.dir}/" includes="META-INF/,logback.xml" />
<fileset dir="${resources.dir}/" />
<!-- Libraries to extract into base JAR -->
<zipfileset src="${core.dir}/build/jar/OpenRocket-core.jar" />
<zipfileset src="${lib.dir}/miglayout15-swing.jar" />
<zipfileset src="${core.dir}/lib/guice-3.0.jar" />
<zipfileset src="${core.dir}/lib/aopalliance.jar"/>
<zipfileset src="${core.dir}/lib/guice-multibindings-3.0.jar"/>
<zipfileset src="${lib.dir}/iText-5.0.2.jar"/>
<zipfileset src="${core.dir}/lib/javax.inject.jar"/>
<zipfileset src="${lib.dir}/jcommon-1.0.18.jar"/>
<zipfileset src="${lib.dir}/jfreechart-1.0.15.jar"/>
<zipfileset src="${lib.dir}/miglayout15-swing.jar"/>
<zipfileset src="${core.dir}/lib/opencsv-2.3.jar"/>
<zipfileset src="${lib.dir}/OrangeExtensions-1.2.jar"/>
<zipfileset src="${core.dir}/lib/annotation-detector-3.0.2-SNAPSHOT.jar"/>
<zipfileset src="${core.dir}/lib/slf4j-api-1.7.5.jar"/>
<zipfileset src="${lib.dir}/logback-classic-1.0.12.jar"/>
<zipfileset src="${lib.dir}/logback-core-1.0.12.jar"/>
<!-- JOGL libraries need to be jar-in-jar -->
<zipfileset dir="${lib.dir}/jogl" prefix="lib">
<include name="*.jar"/>
</zipfileset>
<!-- Include metafiles about OR -->
<fileset dir="${basedir}" includes="LICENSE.TXT README.TXT ChangeLog ReleaseNotes fileformat.txt" />
</jar>
</target>
<target name="serialize-presets" depends="build" description="Preprocess the orc preset files into serialized form">
<java classname="net.sf.openrocket.utils.SerializePresets"
fork="true"
classpathref="run-classpath"
failonerror="true">
</java>
</target>
<!-- CONVERT vendor csv to ORC files -->
<macrodef name="build-orc-file">
<attribute name="dir"/>
<attribute name="vendor"/>
<sequential>
<echo>Generating ORC file for vendor @{vendor}</echo>
<java classname="net.sf.openrocket.preset.loader.RocksimComponentFileTranslator"
fork="true"
classpathref="run-classpath"
failonerror="true">
<arg value="@{dir}"/>
<arg value="${resources-src.dir}/datafiles/presets/@{vendor}.orc"/>
</java>
</sequential>
</macrodef>
<target name="generate-orc-files"
description="Generate ORC file from vendor csv"
depends="build">
<for param="vendor-dir">
<dirset dir="${resources-src.dir}/datafiles/rocksim_components"
includes="*"/>
<sequential>
<propertyregex property="vendor"
override="true"
input="@{vendor-dir}"
select="\1"
regexp=".*[/\\]([^/\\]*)$"/>
<build-orc-file dir="@{vendor-dir}" vendor="${vendor}"/>
</sequential>
</for>
</target>
<!-- DIST-SRC -->
<target name="dist-src">
<echo>
Building source distribution
</echo>
<mkdir dir="${build.dir}/${pkgname}"/>
<mkdir dir="${jar.dir}"/>
<copy todir="${build.dir}/${pkgname}">
<fileset dir="${basedir}" includes="*" excludes="*.log">
<type type="file"/>
</fileset>
<fileset dir="${basedir}" includes="resources/ lib/ lib-test/ src/ test/ resources-src/datafiles/"/>
</copy>
<zip destfile="${dist.src}" basedir="${build.dir}" includes="${pkgname}/"/>
<delete dir="${build.dir}/${pkgname}"/>
</target>
<!-- DIST-SRC-TEST -->
<target name="dist-src-test" depends="dist-src">
<echo>
Testing source distribution
</echo>
<delete dir="${dist-test.dir}"/>
<mkdir dir="${dist-test.dir}"/>
<unzip dest="${dist-test.dir}" src="${dist.src}"/>
<ant dir="${dist-test.dir}/${pkgname}" antfile="build.xml" target="jar"/>
<ant dir="${dist-test.dir}/${pkgname}" antfile="build.xml" target="unittest"/>
<delete dir="${dist-test.dir}"/>
<echo>
Source distribution test successful
</echo>
</target>
<!-- DIST-BIN -->
<target name="dist-bin" depends="check,clean,unittest,jar">
<move file="${jar.file}" tofile="${dist.bin}"/>
</target>
<!-- DIST -->
<target name="dist" depends="dist-bin,dist-src,dist-src-test">
<echo>Distribution ${build.version} (${build.source}) built into directory ${jar.dir}</echo>
</target>
<!-- CHECK -->
<target name="check" depends="checktodo,checkascii"/>
<!-- CHECK TODOs -->
<target name="todo" depends="checktodo"/>
<target name="checktodo">
<tempfile property="todo.file" prefix="checktodo-" destDir="${tmp.dir}"/>
<echo>Checking project for FIXMEs.</echo>
<concat destfile="${todo.file}">
<fileset dir="${src.dir}">
<include name="**/*.java"/>
</fileset>
<fileset dir="${src-test.dir}">
<include name="**/*.java"/>
</fileset>
<filterchain>
<linecontainsregexp>
<regexp pattern="(FIXME|TODO:.*CRITICAL)"/>
</linecontainsregexp>
</filterchain>
</concat>
<loadfile srcfile="${todo.file}" property="criticaltodos"/>
<delete file="${todo.file}"/>
<fail if="criticaltodos">CRITICAL TODOs exist in project:
${criticaltodos}</fail>
<echo>No critical TODOs in project.</echo>
</target>
<!-- CHECK ASCII -->
<target name="ascii" depends="checkascii"/>
<target name="checkascii">
<tempfile property="ascii.file" prefix="checkascii-" destDir="${tmp.dir}"/>
<echo>Checking project for non-ASCII characters.</echo>
<concat destfile="${ascii.file}">
<fileset dir="${src.dir}">
<include name="**/*.java"/>
</fileset>
<fileset dir="${src-test.dir}">
<include name="**/*.java"/>
</fileset>
<filterchain>
<linecontainsregexp>
<regexp pattern="\P{ASCII}"/>
</linecontainsregexp>
</filterchain>
</concat>
<loadfile srcfile="${ascii.file}" property="nonascii"/>
<delete file="${ascii.file}"/>
<fail if="nonascii">Non-ASCII characters exist in project:
${nonascii}</fail>
<echo>No non-ASCII characters in project.</echo>
</target>
<!-- Unit tests -->
<target name="unittest" description="Execute unit tests" depends="build">
<echo>Building unit tests</echo>
<mkdir dir="${build-test.dir}"/>
<javac debug="true" srcdir="${src-test.dir}" destdir="${build-test.dir}" classpathref="test-classpath"/>
<echo>Running unit tests</echo>
<mkdir dir="${tmp.dir}/rawtestoutput"/>
<junit fork="yes" forkmode="once" printsummary="false" failureproperty="junit.failure">
<classpath>
<path refid="test-classpath"/>
<path location="${basedir}"/>
</classpath>
<batchtest todir="${tmp.dir}/rawtestoutput">
<fileset dir="${build-test.dir}">
<include name="**/Test*.class" />
<include name="**/*Test.class" />
<exclude name="**/*$*.class" />
<exclude name="Test.class" />
</fileset>
<formatter type="xml"/>
</batchtest>
</junit>
<junitreport todir="${tmp.dir}">
<fileset dir="${tmp.dir}/rawtestoutput"/>
<report todir="${tmp.dir}/test-reports"/>
</junitreport>
<fail if="junit.failure" message="Unit test(s) failed. See report in ${tmp.dir}/test-reports/index.html"/>
<echo>
Unit tests passed successfully.
</echo>
</target>
<!-- Unit test (show errors in output stream instead of junit report) -->
<target name="unittest-no-junit-report" description="Execute unit tests, show report to output stream" depends="build">
<echo>Building unit tests</echo>
<mkdir dir="${build-test.dir}"/>
<javac debug="true" srcdir="${src-test.dir}" destdir="${build-test.dir}" classpathref="test-classpath"/>
<echo>Running unit tests</echo>
<mkdir dir="${tmp.dir}/rawtestoutput"/>
<junit fork="yes" forkmode="once" printsummary="false" failureproperty="junit.failure">
<classpath>
<path refid="test-classpath"/>
<path location="${basedir}"/>
</classpath>
<batchtest todir="${tmp.dir}/rawtestoutput">
<fileset dir="${build-test.dir}">
<include name="**/Test*.class" />
<include name="**/*Test.class" />
<exclude name="**/*$*.class" />
<exclude name="Test.class" />
</fileset>
<!-- <formatter type="xml"/> -->
<formatter type="plain" usefile="false" />
</batchtest>
<jvmarg value="-Dlogback.configurationFile=config/logback-stdout-level-error.xml"/>
</junit>
<fail if="junit.failure" message="Unit test(s) failed. See output above for failures."/>
<echo>
Unit tests passed successfully.
</echo>
</target>
</project>

Some files were not shown because too many files have changed in this diff Show More