[Major] Strolch agent is now fully realm capable
ResourceMap and OrderMap are kept in a StrolchRealm object for each realm which is configured. This is transparent for the user. When no realms are defined then the 'defaultRealm' is configured where all methods without a realm parameter use this realm. Once a realm is configured, the defaultRealm must be configured if it is still to be used at runtime. Tests make sure realms work, for both transient, and empty situations. Cached agent mode is next to be implemented
This commit is contained in:
parent
0254a74d16
commit
2686e3d7bf
|
@ -0,0 +1,71 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2013 Robert von Burg <eitch@eitchnet.ch>
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package li.strolch.runtime.agent;
|
||||||
|
|
||||||
|
import java.text.MessageFormat;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import li.strolch.exception.StrolchException;
|
||||||
|
import li.strolch.model.query.StrolchQuery;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||||
|
*/
|
||||||
|
public abstract class AbstractElementMapHandler extends StrolchComponent implements ElementMapHandler {
|
||||||
|
|
||||||
|
protected Map<String, StrolchRealm> realms;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param container
|
||||||
|
* @param componentName
|
||||||
|
*/
|
||||||
|
public AbstractElementMapHandler(ComponentContainerImpl container, String componentName) {
|
||||||
|
super(container, componentName);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ResourceMap getResourceMap() {
|
||||||
|
return getResourceMap(StrolchQuery.DEFAULT_REALM);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ResourceMap getResourceMap(String realm) {
|
||||||
|
StrolchRealm strolchRealm = getRealm(realm);
|
||||||
|
return strolchRealm.getResourceMap();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public OrderMap getOrderMap() {
|
||||||
|
return getOrderMap(StrolchQuery.DEFAULT_REALM);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public OrderMap getOrderMap(String realm) {
|
||||||
|
StrolchRealm strolchRealm = getRealm(realm);
|
||||||
|
return strolchRealm.getOrderMap();
|
||||||
|
}
|
||||||
|
|
||||||
|
private StrolchRealm getRealm(String realm) {
|
||||||
|
assertContainerStarted();
|
||||||
|
StrolchRealm strolchRealm = this.realms.get(realm);
|
||||||
|
if (strolchRealm == null) {
|
||||||
|
String msg = "No realm is configured with the name {0}"; //$NON-NLS-1$
|
||||||
|
msg = MessageFormat.format(msg, realm);
|
||||||
|
throw new StrolchException(msg);
|
||||||
|
}
|
||||||
|
return strolchRealm;
|
||||||
|
}
|
||||||
|
}
|
|
@ -21,6 +21,10 @@ package li.strolch.runtime.agent;
|
||||||
public interface ElementMapHandler {
|
public interface ElementMapHandler {
|
||||||
|
|
||||||
public ResourceMap getResourceMap();
|
public ResourceMap getResourceMap();
|
||||||
|
|
||||||
|
public ResourceMap getResourceMap(String realm);
|
||||||
|
|
||||||
public OrderMap getOrderMap();
|
public OrderMap getOrderMap();
|
||||||
|
|
||||||
|
public OrderMap getOrderMap(String realm);
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,8 +15,6 @@
|
||||||
*/
|
*/
|
||||||
package li.strolch.runtime.agent;
|
package li.strolch.runtime.agent;
|
||||||
|
|
||||||
import li.strolch.runtime.configuration.ComponentConfiguration;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Robert von Burg <eitch@eitchnet.ch>
|
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||||
*/
|
*/
|
||||||
|
@ -29,11 +27,4 @@ public class EmptyElementMapHandler extends InMemoryElementMapHandler {
|
||||||
public EmptyElementMapHandler(ComponentContainerImpl container, String componentName) {
|
public EmptyElementMapHandler(ComponentContainerImpl container, String componentName) {
|
||||||
super(container, componentName);
|
super(container, componentName);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void initialize(ComponentConfiguration configuration) {
|
|
||||||
this.resourceMap = new InMemoryResourceMap();
|
|
||||||
this.orderMap = new InMemoryOrderMap();
|
|
||||||
super.initialize(configuration);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,15 +15,16 @@
|
||||||
*/
|
*/
|
||||||
package li.strolch.runtime.agent;
|
package li.strolch.runtime.agent;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
import li.strolch.model.query.StrolchQuery;
|
||||||
|
import li.strolch.runtime.configuration.ComponentConfiguration;
|
||||||
|
import li.strolch.runtime.configuration.RuntimeConfiguration;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Robert von Burg <eitch@eitchnet.ch>
|
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
public abstract class InMemoryElementMapHandler extends StrolchComponent implements ElementMapHandler {
|
public class InMemoryElementMapHandler extends AbstractElementMapHandler {
|
||||||
|
|
||||||
protected ResourceMap resourceMap;
|
|
||||||
protected OrderMap orderMap;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param container
|
* @param container
|
||||||
|
@ -33,21 +34,20 @@ public abstract class InMemoryElementMapHandler extends StrolchComponent impleme
|
||||||
super(container, componentName);
|
super(container, componentName);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @return the resourceMap
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public ResourceMap getResourceMap() {
|
public void initialize(ComponentConfiguration configuration) {
|
||||||
assertContainerStarted();
|
|
||||||
return this.resourceMap;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
RuntimeConfiguration runtimeConfiguration = configuration.getRuntimeConfiguration();
|
||||||
* @return the orderMap
|
String[] realms = runtimeConfiguration.getStringArray(StrolchAgent.PROP_REALMS, StrolchQuery.DEFAULT_REALM);
|
||||||
*/
|
|
||||||
@Override
|
this.realms = new HashMap<>();
|
||||||
public OrderMap getOrderMap() {
|
for (String realm : realms) {
|
||||||
assertContainerStarted();
|
InMemoryResourceMap resourceMap = new InMemoryResourceMap();
|
||||||
return this.orderMap;
|
InMemoryOrderMap orderMap = new InMemoryOrderMap();
|
||||||
|
StrolchRealm strolchRealm = new StrolchRealm(realm, resourceMap, orderMap);
|
||||||
|
this.realms.put(realm, strolchRealm);
|
||||||
|
}
|
||||||
|
|
||||||
|
super.initialize(configuration);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,6 +33,7 @@ public class StrolchAgent {
|
||||||
|
|
||||||
public static final String PROP_DATA_STORE_MODE = "dataStoreMode"; //$NON-NLS-1$
|
public static final String PROP_DATA_STORE_MODE = "dataStoreMode"; //$NON-NLS-1$
|
||||||
public static final String PROP_DATA_STORE_FILE = "dataStoreFile"; //$NON-NLS-1$
|
public static final String PROP_DATA_STORE_FILE = "dataStoreFile"; //$NON-NLS-1$
|
||||||
|
public static final String PROP_REALMS = "realms"; //$NON-NLS-1$
|
||||||
private static final Logger logger = LoggerFactory.getLogger(StrolchAgent.class);
|
private static final Logger logger = LoggerFactory.getLogger(StrolchAgent.class);
|
||||||
|
|
||||||
private ComponentContainerImpl container;
|
private ComponentContainerImpl container;
|
||||||
|
|
|
@ -0,0 +1,57 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2013 Robert von Burg <eitch@eitchnet.ch>
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package li.strolch.runtime.agent;
|
||||||
|
|
||||||
|
import li.strolch.model.query.StrolchQuery;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||||
|
*/
|
||||||
|
public class StrolchRealm {
|
||||||
|
|
||||||
|
public static final String DEFAULT_REALM = StrolchQuery.DEFAULT_REALM;
|
||||||
|
|
||||||
|
private String realm;
|
||||||
|
private ResourceMap resourceMap;
|
||||||
|
private OrderMap orderMap;
|
||||||
|
|
||||||
|
public StrolchRealm(String realm, ResourceMap resourceMap, OrderMap orderMap) {
|
||||||
|
this.realm = realm;
|
||||||
|
this.resourceMap = resourceMap;
|
||||||
|
this.orderMap = orderMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the realm
|
||||||
|
*/
|
||||||
|
public String getRealm() {
|
||||||
|
return this.realm;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the resourceMap
|
||||||
|
*/
|
||||||
|
public ResourceMap getResourceMap() {
|
||||||
|
return this.resourceMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the orderMap
|
||||||
|
*/
|
||||||
|
public OrderMap getOrderMap() {
|
||||||
|
return this.orderMap;
|
||||||
|
}
|
||||||
|
}
|
|
@ -17,11 +17,14 @@ package li.strolch.runtime.agent;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.text.MessageFormat;
|
import java.text.MessageFormat;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import li.strolch.model.xml.XmlModelDefaultHandler.XmlModelStatistics;
|
import li.strolch.model.xml.XmlModelDefaultHandler.XmlModelStatistics;
|
||||||
import li.strolch.model.xml.XmlModelFileHandler;
|
import li.strolch.model.xml.XmlModelFileHandler;
|
||||||
import li.strolch.runtime.configuration.ComponentConfiguration;
|
import li.strolch.runtime.configuration.ComponentConfiguration;
|
||||||
import li.strolch.runtime.configuration.RuntimeConfiguration;
|
import li.strolch.runtime.configuration.RuntimeConfiguration;
|
||||||
|
import li.strolch.runtime.configuration.StrolchConfigurationException;
|
||||||
import ch.eitchnet.utils.helper.StringHelper;
|
import ch.eitchnet.utils.helper.StringHelper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -29,7 +32,7 @@ import ch.eitchnet.utils.helper.StringHelper;
|
||||||
*/
|
*/
|
||||||
public class TransientElementMapHandler extends InMemoryElementMapHandler {
|
public class TransientElementMapHandler extends InMemoryElementMapHandler {
|
||||||
|
|
||||||
private File modelFile;
|
private Map<String, File> realmModelFiles;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param container
|
* @param container
|
||||||
|
@ -41,29 +44,52 @@ public class TransientElementMapHandler extends InMemoryElementMapHandler {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initialize(ComponentConfiguration configuration) {
|
public void initialize(ComponentConfiguration configuration) {
|
||||||
|
super.initialize(configuration);
|
||||||
|
|
||||||
|
this.realmModelFiles = new HashMap<>();
|
||||||
RuntimeConfiguration runtimeConfiguration = configuration.getRuntimeConfiguration();
|
RuntimeConfiguration runtimeConfiguration = configuration.getRuntimeConfiguration();
|
||||||
File modelFile = runtimeConfiguration.getDataFile(StrolchAgent.PROP_DATA_STORE_FILE, null,
|
for (String realm : this.realms.keySet()) {
|
||||||
runtimeConfiguration, true);
|
String key = getDataStoreFilePropKey(realm);
|
||||||
this.modelFile = modelFile;
|
|
||||||
|
|
||||||
this.resourceMap = new InMemoryResourceMap();
|
if (!runtimeConfiguration.hasProperty(key)) {
|
||||||
this.orderMap = new InMemoryOrderMap();
|
String msg = "There is no data store file for realm {0}. Set a property with key {1}"; //$NON-NLS-1$
|
||||||
|
msg = MessageFormat.format(msg, realm, key);
|
||||||
|
throw new StrolchConfigurationException(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
File modelFile = runtimeConfiguration.getDataFile(key, null, runtimeConfiguration, true);
|
||||||
|
this.realmModelFiles.put(realm, modelFile);
|
||||||
|
}
|
||||||
|
|
||||||
super.initialize(configuration);
|
super.initialize(configuration);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String getDataStoreFilePropKey(String realm) {
|
||||||
|
if (realm.equals(StrolchRealm.DEFAULT_REALM))
|
||||||
|
return StrolchAgent.PROP_DATA_STORE_FILE;
|
||||||
|
return StrolchAgent.PROP_DATA_STORE_FILE + "." + realm; //$NON-NLS-1$
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void start() {
|
public void start() {
|
||||||
|
|
||||||
InMemoryElementListener elementListener = new InMemoryElementListener(this.resourceMap, this.orderMap);
|
for (String realm : this.realms.keySet()) {
|
||||||
XmlModelFileHandler handler = new XmlModelFileHandler(elementListener, this.modelFile);
|
|
||||||
handler.parseFile();
|
StrolchRealm strolchRealm = this.realms.get(realm);
|
||||||
XmlModelStatistics statistics = handler.getStatistics();
|
ResourceMap resourceMap = strolchRealm.getResourceMap();
|
||||||
String durationS = StringHelper.formatNanoDuration(statistics.durationNanos);
|
OrderMap orderMap = strolchRealm.getOrderMap();
|
||||||
logger.info(MessageFormat.format("Loading XML Model file {0} took {1}.", this.modelFile.getName(), durationS)); //$NON-NLS-1$
|
|
||||||
logger.info(MessageFormat.format("Loaded {0} Orders", statistics.nrOfOrders)); //$NON-NLS-1$
|
File modelFile = this.realmModelFiles.get(realm);
|
||||||
logger.info(MessageFormat.format("Loaded {0} Resources", statistics.nrOfResources)); //$NON-NLS-1$
|
InMemoryElementListener elementListener = new InMemoryElementListener(resourceMap, orderMap);
|
||||||
|
XmlModelFileHandler handler = new XmlModelFileHandler(elementListener, modelFile);
|
||||||
|
handler.parseFile();
|
||||||
|
XmlModelStatistics statistics = handler.getStatistics();
|
||||||
|
String durationS = StringHelper.formatNanoDuration(statistics.durationNanos);
|
||||||
|
logger.info(MessageFormat.format(
|
||||||
|
"Loading XML Model file {0} for realm {1} took {2}.", modelFile.getName(), realm, durationS)); //$NON-NLS-1$
|
||||||
|
logger.info(MessageFormat.format("Loaded {0} Orders", statistics.nrOfOrders)); //$NON-NLS-1$
|
||||||
|
logger.info(MessageFormat.format("Loaded {0} Resources", statistics.nrOfResources)); //$NON-NLS-1$
|
||||||
|
}
|
||||||
|
|
||||||
super.start();
|
super.start();
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,10 +42,24 @@ public abstract class AbstractionConfiguration {
|
||||||
return this.name;
|
return this.name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean hasProperty(String key) {
|
||||||
|
return this.configurationValues.containsKey(key);
|
||||||
|
}
|
||||||
|
|
||||||
public Set<String> getPropertyKeys() {
|
public Set<String> getPropertyKeys() {
|
||||||
return new HashSet<>(this.configurationValues.keySet());
|
return new HashSet<>(this.configurationValues.keySet());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String[] getStringArray(String key, String defValue) {
|
||||||
|
String value = getValue(key, defValue);
|
||||||
|
String[] values = value.split(","); //$NON-NLS-1$
|
||||||
|
for (int i = 0; i < values.length; i++) {
|
||||||
|
values[i] = values[i].trim();
|
||||||
|
}
|
||||||
|
|
||||||
|
return values;
|
||||||
|
}
|
||||||
|
|
||||||
public String getString(String key, String defValue) {
|
public String getString(String key, String defValue) {
|
||||||
return getValue(key, defValue);
|
return getValue(key, defValue);
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,6 +31,7 @@ import org.slf4j.LoggerFactory;
|
||||||
@SuppressWarnings("nls")
|
@SuppressWarnings("nls")
|
||||||
public class ComponentContainerTest {
|
public class ComponentContainerTest {
|
||||||
|
|
||||||
|
public static final String PATH_REALM_CONTAINER = "src/test/resources/realmtest";
|
||||||
public static final String PATH_TRANSIENT_CONTAINER = "src/test/resources/transienttest";
|
public static final String PATH_TRANSIENT_CONTAINER = "src/test/resources/transienttest";
|
||||||
public static final String PATH_EMPTY_CONTAINER = "src/test/resources/emptytest";
|
public static final String PATH_EMPTY_CONTAINER = "src/test/resources/emptytest";
|
||||||
|
|
||||||
|
@ -62,6 +63,19 @@ public class ComponentContainerTest {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shouldStartRealmTestContainer() {
|
||||||
|
|
||||||
|
try {
|
||||||
|
StrolchAgent agent = startContainer(PATH_REALM_CONTAINER);
|
||||||
|
testContainer(agent);
|
||||||
|
destroyContainer(agent);
|
||||||
|
} catch (Exception e) {
|
||||||
|
logger.error(e.getMessage(), e);
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static StrolchAgent startContainer(String rootPath) {
|
public static StrolchAgent startContainer(String rootPath) {
|
||||||
File rootPathF = new File(rootPath);
|
File rootPathF = new File(rootPath);
|
||||||
return startContainer(rootPathF);
|
return startContainer(rootPathF);
|
||||||
|
|
|
@ -0,0 +1,36 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<StrolchConfiguration>
|
||||||
|
<Runtime>
|
||||||
|
<applicationName>StrolchRuntimeTest</applicationName>
|
||||||
|
<Properties>
|
||||||
|
<dataStoreMode>TRANSIENT</dataStoreMode>
|
||||||
|
<realms>myRealm</realms>
|
||||||
|
<dataStoreFile.myRealm>StrolchModel.xml</dataStoreFile.myRealm>
|
||||||
|
<verbose>true</verbose>
|
||||||
|
</Properties>
|
||||||
|
</Runtime>
|
||||||
|
<Component>
|
||||||
|
<name>ServiceHandler</name>
|
||||||
|
<api>li.strolch.runtime.test.component.ServiceHandlerTest</api>
|
||||||
|
<impl>li.strolch.runtime.test.component.ServiceHandlerTestImpl</impl>
|
||||||
|
<depends>PersistenceHandler</depends>
|
||||||
|
<Properties>
|
||||||
|
</Properties>
|
||||||
|
</Component>
|
||||||
|
<Component>
|
||||||
|
<name>PostInitializer</name>
|
||||||
|
<api>li.strolch.runtime.test.component.PostInitializerTest</api>
|
||||||
|
<impl>li.strolch.runtime.test.component.PostInitializerTestImpl</impl>
|
||||||
|
<depends>ServiceHandler</depends>
|
||||||
|
<Properties>
|
||||||
|
</Properties>
|
||||||
|
</Component>
|
||||||
|
<Component>
|
||||||
|
<name>PersistenceHandler</name>
|
||||||
|
<api>li.strolch.runtime.test.component.PersistenceHandlerTest</api>
|
||||||
|
<impl>li.strolch.runtime.test.component.PersistenceHandlerTestImpl</impl>
|
||||||
|
<Properties>
|
||||||
|
<verbose>true</verbose>
|
||||||
|
</Properties>
|
||||||
|
</Component>
|
||||||
|
</StrolchConfiguration>
|
|
@ -0,0 +1,14 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||||
|
<StrolchModel>
|
||||||
|
<Order Id="MyTestOrder" Name="Test Name" Type="TestType" Date="2013-11-20T07:42:57.699+01:00" State="CREATED">
|
||||||
|
<ParameterBag Id="@bag01" Name="Test Bag" Type="TestBag">
|
||||||
|
<Parameter Id="@param7" Name="StringList Param" Type="StringList" Value="Hello;World" />
|
||||||
|
<Parameter Id="@param6" Name="Date Param" Type="Date" Value="2012-11-30T18:12:05.628+01:00" />
|
||||||
|
<Parameter Id="@param5" Name="String Param" Type="String" Value="Strolch" />
|
||||||
|
<Parameter Id="@param4" Name="Long Param" Type="Long" Value="4453234566" />
|
||||||
|
<Parameter Id="@param3" Name="Integer Param" Type="Integer" Value="77" />
|
||||||
|
<Parameter Id="@param2" Name="Float Param" Type="Float" Value="44.3" />
|
||||||
|
<Parameter Id="@param1" Name="Boolean Param" Type="Boolean" Value="true" />
|
||||||
|
</ParameterBag>
|
||||||
|
</Order>
|
||||||
|
</StrolchModel>
|
|
@ -0,0 +1,14 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||||
|
<StrolchModel>
|
||||||
|
<Resource Id="MyTestResource" Name="Test Name" Type="TestType">
|
||||||
|
<ParameterBag Id="@bag01" Name="Test Bag" Type="TestBag">
|
||||||
|
<Parameter Id="@param7" Name="StringList Param" Type="StringList" Value="Hello;World" />
|
||||||
|
<Parameter Id="@param6" Name="Date Param" Type="Date" Value="2012-11-30T18:12:05.628+01:00" />
|
||||||
|
<Parameter Id="@param5" Name="String Param" Type="String" Value="Strolch" />
|
||||||
|
<Parameter Id="@param4" Name="Long Param" Type="Long" Value="4453234566" />
|
||||||
|
<Parameter Id="@param3" Name="Integer Param" Type="Integer" Value="77" />
|
||||||
|
<Parameter Id="@param2" Name="Float Param" Type="Float" Value="44.3" />
|
||||||
|
<Parameter Id="@param1" Name="Boolean Param" Type="Boolean" Value="true" />
|
||||||
|
</ParameterBag>
|
||||||
|
</Resource>
|
||||||
|
</StrolchModel>
|
|
@ -0,0 +1,29 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<StrolchModel>
|
||||||
|
<Resource Id="TestType" Name="TestType Template" Type="Template">
|
||||||
|
<ParameterBag Id="@bag01" Name="Test Bag" Type="TestBag">
|
||||||
|
<Parameter Id="@param7" Name="StringList Param" Type="StringList" Value="Hello;World" />
|
||||||
|
<Parameter Id="@param6" Name="Date Param" Type="Date" Value="2012-11-30T18:12:05.628+01:00" />
|
||||||
|
<Parameter Id="@param5" Name="String Param" Type="String" Value="Strolch" />
|
||||||
|
<Parameter Id="@param4" Name="Long Param" Type="Long" Value="4453234566" />
|
||||||
|
<Parameter Id="@param3" Name="Integer Param" Type="Integer" Value="77" />
|
||||||
|
<Parameter Id="@param2" Name="Float Param" Type="Float" Value="44.3" />
|
||||||
|
<Parameter Id="@param1" Name="Boolean Param" Type="Boolean" Value="true" />
|
||||||
|
</ParameterBag>
|
||||||
|
</Resource>
|
||||||
|
<Order Id="Template" Name="MyTestOrder Template" Type="MyTestOrder">
|
||||||
|
<ParameterBag Id="@bag01" Name="Test Bag" Type="TestBag">
|
||||||
|
<Parameter Id="@param7" Name="StringList Param" Type="StringList" Value="Hello;World" />
|
||||||
|
<Parameter Id="@param6" Name="Date Param" Type="Date" Value="2012-11-30T18:12:05.628+01:00" />
|
||||||
|
<Parameter Id="@param5" Name="String Param" Type="String" Value="Strolch" />
|
||||||
|
<Parameter Id="@param4" Name="Long Param" Type="Long" Value="4453234566" />
|
||||||
|
<Parameter Id="@param3" Name="Integer Param" Type="Integer" Value="77" />
|
||||||
|
<Parameter Id="@param2" Name="Float Param" Type="Float" Value="44.3" />
|
||||||
|
<Parameter Id="@param1" Name="Boolean Param" Type="Boolean" Value="true" />
|
||||||
|
</ParameterBag>
|
||||||
|
</Order>
|
||||||
|
|
||||||
|
<IncludeFile file="Resources.xml" />
|
||||||
|
<IncludeFile file="Orders.xml" />
|
||||||
|
|
||||||
|
</StrolchModel>
|
Loading…
Reference in New Issue