Skip to content

Commit e4f613b

Browse files
authored
Merge pull request #46 from PGWelch/changes-4-territorium-polys
Changes 4 territorium polys
2 parents 1df4afc + 2218d03 commit e4f613b

File tree

34 files changed

+444
-54
lines changed

34 files changed

+444
-54
lines changed

com.opendoorlogistics.api/README.txt

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
The api jar is a dependency for plugin components - e.g. vehicle routing, territorium.
2+
To export the api as a fat jar file, export as a Runnable jar from Eclipse, using the dummy main method in ODLTime.java

com.opendoorlogistics.api/src/com/opendoorlogistics/api/IO.java

+14
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
package com.opendoorlogistics.api;
22

33
import java.io.File;
4+
import java.util.List;
45

56
import com.opendoorlogistics.api.components.ProcessingApi;
67
import com.opendoorlogistics.api.io.ImportFileType;
78
import com.opendoorlogistics.api.tables.ODLDatastore;
89
import com.opendoorlogistics.api.tables.ODLDatastoreAlterable;
10+
import com.opendoorlogistics.api.tables.ODLTable;
911
import com.opendoorlogistics.api.tables.ODLTableAlterable;
1012
import com.opendoorlogistics.api.tables.ODLTableReadOnly;
1113

@@ -20,6 +22,8 @@ public interface IO {
2022

2123
File getStandardScriptsDir();
2224

25+
File getAsRelativeIfWithinStandardShapefileDirectory(File file);
26+
2327
/**
2428
* If we're in ODL Studio this returns the file that the current datastore was loaded from.
2529
* Unlikely to work in ODL Connect...
@@ -46,4 +50,14 @@ public interface IO {
4650
* @return
4751
*/
4852
String normalisePath(String s);
53+
54+
List<String> getShapefileFieldnames(File shapefileOrODLRG);
55+
56+
/**
57+
* Import a shapefile specifying a max number of rows
58+
* @param file
59+
* @param maxRows
60+
* @return
61+
*/
62+
ODLTable importShapefile(File file, int maxRows);
4963
}

com.opendoorlogistics.api/src/com/opendoorlogistics/api/ODLApi.java

+6-2
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,17 @@
88

99
import java.util.List;
1010

11-
import net.xeoh.plugins.base.Plugin;
12-
11+
import com.opendoorlogistics.api.app.ODLApp;
12+
import com.opendoorlogistics.api.app.ODLAppPreferences;
1313
import com.opendoorlogistics.api.app.ODLAppProperties;
1414
import com.opendoorlogistics.api.cache.ObjectCachePool;
1515
import com.opendoorlogistics.api.components.ODLComponentProvider;
1616
import com.opendoorlogistics.api.geometry.Geometry;
1717
import com.opendoorlogistics.api.scripts.Scripts;
1818
import com.opendoorlogistics.api.ui.UIFactory;
1919

20+
import net.xeoh.plugins.base.Plugin;
21+
2022

2123
public interface ODLApi {
2224
ObjectCachePool cache();
@@ -31,6 +33,8 @@ public interface ODLApi {
3133
Scripts scripts();
3234
IO io();
3335
ODLAppProperties properties();
36+
ODLApp app();
37+
ODLAppPreferences preferences();
3438

3539
/**
3640
* Load all plugins of the input class from the plugins directory

com.opendoorlogistics.api/src/com/opendoorlogistics/api/StandardComponents.java

+2
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import com.opendoorlogistics.api.standardcomponents.ScheduleEditor;
1515
import com.opendoorlogistics.api.standardcomponents.TableCreator;
1616
import com.opendoorlogistics.api.standardcomponents.TableViewer;
17+
import com.opendoorlogistics.api.standardcomponents.UpdateTable;
1718

1819
public interface StandardComponents {
1920
Maps map();
@@ -24,4 +25,5 @@ public interface StandardComponents {
2425
ScheduleEditor scheduleEditor();
2526
LineGraph lineGraph();
2627
MatrixExporter matrixExporter();
28+
UpdateTable updateTable();
2729
}

com.opendoorlogistics.api/src/com/opendoorlogistics/api/app/ODLApp.java

+4
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import java.io.File;
44

5+
import javax.swing.JFrame;
6+
57
import com.opendoorlogistics.api.HasApi;
68
import com.opendoorlogistics.api.app.ui.ODLAppUI;
79
import com.opendoorlogistics.api.io.ImportFileType;
@@ -10,6 +12,8 @@
1012
import com.opendoorlogistics.api.tables.ODLTableAlterable;
1113

1214
public interface ODLApp extends AsynchronousScriptExecutor, HasApi{
15+
JFrame getJFrame();
16+
1317
/**
1418
* Set the datastore open in the app
1519
* @param newDs
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.opendoorlogistics.api.app;
2+
3+
/**
4+
* Preferences are persisted unlike properties
5+
* @author Phil
6+
*
7+
*/
8+
public interface ODLAppPreferences {
9+
/**
10+
* Key should be app-wide unique
11+
* @param key
12+
* @return
13+
*/
14+
String get(String key);
15+
16+
/**
17+
* Key should be app-wide unique
18+
* @param key
19+
* @param value
20+
*/
21+
void put(String key, String value);
22+
}

com.opendoorlogistics.api/src/com/opendoorlogistics/api/app/ODLAppProperties.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66
/**
77
* Interface for the app-wide properties.
88
* Properties are accessed by string, where all lookups use standardised strings,
9-
* i.e. they are insensitive to case and whitespace at start and end of ley.
9+
* i.e. they are insensitive to case and whitespace at start and end of key.
10+
* Properties are loaded from config files and may be modified in memory
11+
* but the modication is not persisted
1012
* @author Phil
1113
*
1214
*/

com.opendoorlogistics.api/src/com/opendoorlogistics/api/scripts/ScriptTemplatesBuilder.java

+12
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,22 @@
1313
import com.opendoorlogistics.api.tables.ODLTableDefinition;
1414

1515
public interface ScriptTemplatesBuilder {
16+
public static long FLAG_OUTPUT_DATASTORE_IS_FIXED = 1<<1;
17+
public static long STANDARD_FLAGS = FLAG_OUTPUT_DATASTORE_IS_FIXED;
18+
1619
public static interface BuildScriptCallback {
1720
void buildScript(ScriptOption builder);
1821
}
1922

23+
/**
24+
* Extended interface so we don't break existing modules...
25+
* @author Phil
26+
*
27+
*/
28+
public static interface BuildScriptCallbackExt{
29+
30+
}
31+
2032
ODLApi getApi();
2133

2234
void registerTemplate(String shortName, String name, String description, ODLDatastore<? extends ODLTableDefinition> expectedDatastore, Serializable config);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.opendoorlogistics.api.standardcomponents;
2+
3+
import java.io.Serializable;
4+
5+
import com.opendoorlogistics.api.components.ODLComponent;
6+
7+
public interface UpdateTable extends ODLComponent{
8+
Serializable createConfig(boolean isDelete);
9+
}

com.opendoorlogistics.components/src/com/opendoorlogistics/components/tables/creator/CreateTablesComponent.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ void create(String s, int nb){
8282
ODLTableDefinitionImpl table = new ODLTableDefinitionImpl(-1, "Table" + i);
8383
conf.getTables().add(table);
8484
}
85-
templatesApi.registerTemplate(s, s, s,getIODsDefinition(templatesApi.getApi(), conf), conf, ODLWizardTemplateConfig.STANDARD_FLAGS & (~ODLWizardTemplateConfig.FLAG_OUTPUT_DATASTORE_IS_FIXED),ODLComponent.MODE_DEFAULT);
85+
templatesApi.registerTemplate(s, s, s,getIODsDefinition(templatesApi.getApi(), conf), conf, ScriptTemplatesBuilder.STANDARD_FLAGS & (~ScriptTemplatesBuilder.FLAG_OUTPUT_DATASTORE_IS_FIXED),ODLComponent.MODE_DEFAULT);
8686
}
8787
}
8888
Helper helper = new Helper();
@@ -103,7 +103,7 @@ public static ODLWizardTemplateConfig createTemplateConfig(ODLDatastore<? extend
103103
DatastoreCopier.copyTableDefinition(src, table);
104104
conf.getTables().add(table);
105105
}
106-
return new ODLWizardTemplateConfig("", "", "",null, conf, ODLWizardTemplateConfig.STANDARD_FLAGS & (~ODLWizardTemplateConfig.FLAG_OUTPUT_DATASTORE_IS_FIXED),ODLComponent.MODE_DEFAULT,null);
106+
return new ODLWizardTemplateConfig("", "", "",null, conf, ScriptTemplatesBuilder.STANDARD_FLAGS & (~ScriptTemplatesBuilder.FLAG_OUTPUT_DATASTORE_IS_FIXED),ODLComponent.MODE_DEFAULT,null);
107107
}
108108

109109
@Override

com.opendoorlogistics.core/src/com/opendoorlogistics/core/AppConstants.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@ final public class AppConstants {
1818

1919
public static final int APP_VERSION_MAJOR = 1;
2020

21-
public static final int APP_VERSION_MINOR = 3;
21+
public static final int APP_VERSION_MINOR = 4;
2222

23-
public static final int APP_VERSION_REVISION = 6;
23+
public static final int APP_VERSION_REVISION = 0;
2424

2525
public static final String DATA_DIRECTORY = "data" + File.separator;
2626

com.opendoorlogistics.core/src/com/opendoorlogistics/core/api/impl/IODecorator.java

+17
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
package com.opendoorlogistics.core.api.impl;
22

33
import java.io.File;
4+
import java.util.List;
45

56
import com.opendoorlogistics.api.ExecutionReport;
67
import com.opendoorlogistics.api.IO;
78
import com.opendoorlogistics.api.components.ProcessingApi;
89
import com.opendoorlogistics.api.io.ImportFileType;
910
import com.opendoorlogistics.api.tables.ODLDatastore;
1011
import com.opendoorlogistics.api.tables.ODLDatastoreAlterable;
12+
import com.opendoorlogistics.api.tables.ODLTable;
1113
import com.opendoorlogistics.api.tables.ODLTableAlterable;
1214
import com.opendoorlogistics.api.tables.ODLTableReadOnly;
1315

@@ -50,6 +52,21 @@ public String normalisePath(String s) {
5052
public File getLoadedExcelFile() {
5153
return io.getLoadedExcelFile();
5254
}
55+
56+
@Override
57+
public List<String> getShapefileFieldnames(File shapefileOrODLRG) {
58+
return io.getShapefileFieldnames(shapefileOrODLRG);
59+
}
60+
61+
@Override
62+
public ODLTable importShapefile(File file, int maxRows) {
63+
return io.importShapefile(file, maxRows);
64+
}
65+
66+
@Override
67+
public File getAsRelativeIfWithinStandardShapefileDirectory(File file) {
68+
return io.getAsRelativeIfWithinStandardShapefileDirectory(file);
69+
}
5370

5471

5572
}

com.opendoorlogistics.core/src/com/opendoorlogistics/core/api/impl/IOImpl.java

+64-6
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,33 @@
11
package com.opendoorlogistics.core.api.impl;
22

33
import java.io.File;
4+
import java.net.URL;
5+
import java.util.ArrayList;
6+
import java.util.HashMap;
7+
import java.util.List;
8+
import java.util.Map;
49

510
import org.apache.commons.io.FilenameUtils;
11+
import org.geotools.data.DataStore;
12+
import org.geotools.data.DataStoreFinder;
13+
import org.opengis.feature.simple.SimpleFeatureType;
614

715
import com.opendoorlogistics.api.ExecutionReport;
816
import com.opendoorlogistics.api.IO;
9-
import com.opendoorlogistics.api.ODLApi;
1017
import com.opendoorlogistics.api.components.ProcessingApi;
1118
import com.opendoorlogistics.api.io.ImportFileType;
12-
import com.opendoorlogistics.api.scripts.ScriptOption;
1319
import com.opendoorlogistics.api.tables.ODLDatastore;
1420
import com.opendoorlogistics.api.tables.ODLDatastoreAlterable;
21+
import com.opendoorlogistics.api.tables.ODLTable;
1522
import com.opendoorlogistics.api.tables.ODLTableAlterable;
1623
import com.opendoorlogistics.api.tables.ODLTableReadOnly;
1724
import com.opendoorlogistics.core.AppConstants;
18-
import com.opendoorlogistics.core.api.impl.scripts.ScriptOptionImpl;
19-
import com.opendoorlogistics.core.components.ODLGlobalComponents;
20-
import com.opendoorlogistics.core.scripts.elements.Script;
21-
import com.opendoorlogistics.core.scripts.io.ScriptIO;
25+
import com.opendoorlogistics.core.geometry.ImportShapefile;
26+
import com.opendoorlogistics.core.geometry.rog.RogReaderUtils;
2227
import com.opendoorlogistics.core.tables.io.PoiIO;
2328
import com.opendoorlogistics.core.tables.io.TableIOUtils;
29+
import com.opendoorlogistics.core.utils.Exceptions;
30+
import com.opendoorlogistics.core.utils.io.RelativeFiles;
2431
import com.opendoorlogistics.core.utils.strings.Strings;
2532

2633
public class IOImpl implements IO{
@@ -80,4 +87,55 @@ public File getLoadedExcelFile() {
8087
return null;
8188
}
8289

90+
@Override
91+
public List<String> getShapefileFieldnames(File shapefileOrODLRG) {
92+
// turn an .odlrg file reference into a shapefile reference
93+
if(Strings.equalsStd(FilenameUtils.getExtension(shapefileOrODLRG.getName()), RogReaderUtils.RENDER_GEOMETRY_FILE_EXT)){
94+
String s = FilenameUtils.removeExtension(shapefileOrODLRG.getAbsolutePath());
95+
s += ".shp";
96+
shapefileOrODLRG = new File(s);
97+
}
98+
99+
DataStore shapefile = null;
100+
try {
101+
Map<String, URL> map = new HashMap<String, URL>();
102+
map.put("url", shapefileOrODLRG.toURI().toURL());
103+
shapefile = DataStoreFinder.getDataStore(map);
104+
105+
// check not corrupt
106+
if (shapefile.getTypeNames().length != 1) {
107+
throw new RuntimeException("Shapefile should only contain one type");
108+
}
109+
110+
String typename = shapefile.getTypeNames()[0];
111+
SimpleFeatureType schema = shapefile.getSchema(typename);
112+
int nAttrib = schema.getAttributeCount();
113+
ArrayList<String> ret = new ArrayList<>();
114+
for (int i = 0; i < nAttrib; i++) {
115+
ret.add(schema.getDescriptor(i).getLocalName());
116+
}
117+
return ret;
118+
119+
} catch (Throwable e) {
120+
throw Exceptions.asUnchecked(e);
121+
} finally {
122+
123+
if (shapefile != null) {
124+
shapefile.dispose();
125+
}
126+
}
127+
}
128+
129+
@Override
130+
public ODLTable importShapefile(File file, int maxRows) {
131+
ODLDatastoreAlterable<? extends ODLTableAlterable> ds=new ODLApiImpl().tables().createAlterableDs();
132+
ImportShapefile.importShapefile(file, false, ds, false, maxRows);
133+
return ds.getTableAt(0);
134+
}
135+
136+
@Override
137+
public File getAsRelativeIfWithinStandardShapefileDirectory(File file) {
138+
return RelativeFiles.makeRelativeIfAbsoluteWithinDefaultDirectory(file.getAbsolutePath(), AppConstants.SHAPEFILES_DIRECTORY);
139+
}
140+
83141
}

com.opendoorlogistics.core/src/com/opendoorlogistics/core/api/impl/ODLApiDecorator.java

+12
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
import com.opendoorlogistics.api.StringConventions;
1010
import com.opendoorlogistics.api.Tables;
1111
import com.opendoorlogistics.api.Values;
12+
import com.opendoorlogistics.api.app.ODLApp;
13+
import com.opendoorlogistics.api.app.ODLAppPreferences;
1214
import com.opendoorlogistics.api.app.ODLAppProperties;
1315
import com.opendoorlogistics.api.cache.ObjectCachePool;
1416
import com.opendoorlogistics.api.components.ODLComponentProvider;
@@ -76,6 +78,16 @@ public ODLAppProperties properties() {
7678
public <T extends Plugin> List<T> loadPlugins(Class<T> cls) {
7779
return api.loadPlugins(cls);
7880
}
81+
82+
@Override
83+
public ODLApp app() {
84+
return api.app();
85+
}
86+
87+
@Override
88+
public ODLAppPreferences preferences() {
89+
return api.preferences();
90+
}
7991

8092

8193
}

com.opendoorlogistics.core/src/com/opendoorlogistics/core/api/impl/ODLApiImpl.java

+17-1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
import com.opendoorlogistics.api.StringConventions;
2626
import com.opendoorlogistics.api.Tables;
2727
import com.opendoorlogistics.api.Values;
28+
import com.opendoorlogistics.api.app.ODLApp;
29+
import com.opendoorlogistics.api.app.ODLAppPreferences;
2830
import com.opendoorlogistics.api.app.ODLAppProperties;
2931
import com.opendoorlogistics.api.cache.ObjectCachePool;
3032
import com.opendoorlogistics.api.components.ODLComponentProvider;
@@ -46,7 +48,8 @@ public class ODLApiImpl implements ODLApi{
4648
private volatile Functions functions;
4749
private volatile IO io;
4850
private volatile Scripts scripts;
49-
51+
private volatile ODLAppPreferences preferences;
52+
5053
@Override
5154
public Values values() {
5255
if(conversionApi==null){
@@ -200,6 +203,19 @@ public ObjectCachePool cache() {
200203
return ApplicationCache.singleton();
201204
}
202205

206+
@Override
207+
public ODLApp app() {
208+
throw new UnsupportedOperationException("App object access not supported");
209+
}
210+
211+
@Override
212+
public ODLAppPreferences preferences() {
213+
if(preferences == null){
214+
preferences = new ODLAppPreferencesImpl();
215+
}
216+
return preferences;
217+
}
218+
203219

204220

205221
}

0 commit comments

Comments
 (0)