[Devel] Starting to implement element maps
This commit is contained in:
parent
548a34b9f3
commit
fc3fc3e203
|
@ -0,0 +1,37 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2012, Robert von Burg
|
||||||
|
*
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This file is part of the XXX.
|
||||||
|
*
|
||||||
|
* XXX is free software: you can redistribute
|
||||||
|
* it and/or modify it under the terms of the GNU General Public License as
|
||||||
|
* published by the Free Software Foundation, either version 3 of the License,
|
||||||
|
* or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* XXX is distributed in the hope that it will
|
||||||
|
* be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with XXX. If not, see
|
||||||
|
* <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package li.strolch.runtime.agent;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public interface AgentLifecycleController {
|
||||||
|
|
||||||
|
public void initialize();
|
||||||
|
|
||||||
|
public void start();
|
||||||
|
|
||||||
|
public void stop();
|
||||||
|
|
||||||
|
public void destroy();
|
||||||
|
}
|
|
@ -0,0 +1,75 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2012, Robert von Burg
|
||||||
|
*
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This file is part of the XXX.
|
||||||
|
*
|
||||||
|
* XXX is free software: you can redistribute
|
||||||
|
* it and/or modify it under the terms of the GNU General Public License as
|
||||||
|
* published by the Free Software Foundation, either version 3 of the License,
|
||||||
|
* or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* XXX is distributed in the hope that it will
|
||||||
|
* be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with XXX. If not, see
|
||||||
|
* <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package li.strolch.runtime.agent;
|
||||||
|
|
||||||
|
import java.text.MessageFormat;
|
||||||
|
|
||||||
|
import li.strolch.runtime.configuration.ComponentConfiguration;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public enum DataStoreMode {
|
||||||
|
EMPTY {
|
||||||
|
@Override
|
||||||
|
public AgentLifecycleController getAgentLifecycleController(StrolchAgent strolchAgent,
|
||||||
|
ComponentConfiguration configuration) {
|
||||||
|
return new EmptyDataStoreModeAgentInitializer(strolchAgent, configuration);
|
||||||
|
}
|
||||||
|
}, //
|
||||||
|
TRANSIENT {
|
||||||
|
@Override
|
||||||
|
public AgentLifecycleController getAgentLifecycleController(StrolchAgent strolchAgent,
|
||||||
|
ComponentConfiguration configuration) {
|
||||||
|
return new TransientDataStoreModeAgentInitializer(strolchAgent, configuration);
|
||||||
|
}
|
||||||
|
}, //
|
||||||
|
CACHED {
|
||||||
|
@Override
|
||||||
|
public AgentLifecycleController getAgentLifecycleController(StrolchAgent strolchAgent,
|
||||||
|
ComponentConfiguration configuration) {
|
||||||
|
throw new UnsupportedOperationException(MessageFormat.format("The mode {0} is not yet supported!", this)); //$NON-NLS-1$
|
||||||
|
}
|
||||||
|
}, //
|
||||||
|
TRANSACTIONAL {
|
||||||
|
@Override
|
||||||
|
public AgentLifecycleController getAgentLifecycleController(StrolchAgent strolchAgent,
|
||||||
|
ComponentConfiguration configuration) {
|
||||||
|
throw new UnsupportedOperationException(MessageFormat.format("The mode {0} is not yet supported!", this)); //$NON-NLS-1$
|
||||||
|
}
|
||||||
|
}; //
|
||||||
|
|
||||||
|
public AgentLifecycleController getAgentLifecycleController(StrolchAgent strolchAgent,
|
||||||
|
ComponentConfiguration configuration) {
|
||||||
|
throw new UnsupportedOperationException("Please implement in enum!"); //$NON-NLS-1$
|
||||||
|
}
|
||||||
|
|
||||||
|
public static DataStoreMode parseDataStoreMode(String modeS) {
|
||||||
|
for (DataStoreMode dataStoreMode : values()) {
|
||||||
|
if (dataStoreMode.name().endsWith(modeS))
|
||||||
|
return dataStoreMode;
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new IllegalArgumentException(MessageFormat.format("There is no data store mode ''{0}''", modeS)); //$NON-NLS-1$
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,40 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2012, Robert von Burg
|
||||||
|
*
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This file is part of the XXX.
|
||||||
|
*
|
||||||
|
* XXX is free software: you can redistribute
|
||||||
|
* it and/or modify it under the terms of the GNU General Public License as
|
||||||
|
* published by the Free Software Foundation, either version 3 of the License,
|
||||||
|
* or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* XXX is distributed in the hope that it will
|
||||||
|
* be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with XXX. If not, see
|
||||||
|
* <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package li.strolch.runtime.agent;
|
||||||
|
|
||||||
|
import li.strolch.model.StrolchElement;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public interface ElementMap<T extends StrolchElement> {
|
||||||
|
|
||||||
|
public T getBy(String type, String id);
|
||||||
|
|
||||||
|
public void add(T element);
|
||||||
|
|
||||||
|
public void update(T element);
|
||||||
|
|
||||||
|
public void remove(T element);
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,89 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2012, Robert von Burg
|
||||||
|
*
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This file is part of the XXX.
|
||||||
|
*
|
||||||
|
* XXX is free software: you can redistribute
|
||||||
|
* it and/or modify it under the terms of the GNU General Public License as
|
||||||
|
* published by the Free Software Foundation, either version 3 of the License,
|
||||||
|
* or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* XXX is distributed in the hope that it will
|
||||||
|
* be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with XXX. If not, see
|
||||||
|
* <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package li.strolch.runtime.agent;
|
||||||
|
|
||||||
|
import java.text.MessageFormat;
|
||||||
|
|
||||||
|
import li.strolch.runtime.configuration.ComponentConfiguration;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class EmptyDataStoreModeAgentInitializer implements AgentLifecycleController {
|
||||||
|
|
||||||
|
public static final String PROP_DATA_STORE_MODEL_FILE = "dataStoreModelFile"; //$NON-NLS-1$
|
||||||
|
|
||||||
|
protected static final Logger logger = LoggerFactory.getLogger(EmptyDataStoreModeAgentInitializer.class);
|
||||||
|
|
||||||
|
protected StrolchAgent strolchAgent;
|
||||||
|
protected ComponentConfiguration configuration;
|
||||||
|
protected OrderMap orderMap;
|
||||||
|
protected ResourceMap resourceMap;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param strolchAgent
|
||||||
|
* @param configuration
|
||||||
|
*/
|
||||||
|
public EmptyDataStoreModeAgentInitializer(StrolchAgent strolchAgent, ComponentConfiguration configuration) {
|
||||||
|
|
||||||
|
if (strolchAgent == null)
|
||||||
|
throw new IllegalStateException("The StrolchAgent is not set!"); //$NON-NLS-1$
|
||||||
|
if (configuration == null)
|
||||||
|
throw new IllegalStateException("The ComponentConfiguration is not set!"); //$NON-NLS-1$
|
||||||
|
if (!strolchAgent.getName().equals(configuration.getName())) {
|
||||||
|
String msg = "The StrolchAgent and component configuration don't fit together as their names don't match: {0} / {1}"; //$NON-NLS-1$
|
||||||
|
msg = MessageFormat.format(msg, strolchAgent.getName(), configuration.getName());
|
||||||
|
throw new IllegalStateException(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.strolchAgent = strolchAgent;
|
||||||
|
this.configuration = configuration;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void initialize() {
|
||||||
|
this.resourceMap = new InMemoryResourceMap();
|
||||||
|
this.orderMap = new InMemoryOrderMap();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void start() {
|
||||||
|
this.strolchAgent.setResourceMap(this.resourceMap);
|
||||||
|
this.strolchAgent.setOrderMap(this.orderMap);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void stop() {
|
||||||
|
this.strolchAgent.setResourceMap(null);
|
||||||
|
this.strolchAgent.setOrderMap(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void destroy() {
|
||||||
|
this.strolchAgent.setResourceMap(null);
|
||||||
|
this.strolchAgent.setOrderMap(null);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,108 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2012, Robert von Burg
|
||||||
|
*
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This file is part of the XXX.
|
||||||
|
*
|
||||||
|
* XXX is free software: you can redistribute
|
||||||
|
* it and/or modify it under the terms of the GNU General Public License as
|
||||||
|
* published by the Free Software Foundation, either version 3 of the License,
|
||||||
|
* or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* XXX is distributed in the hope that it will
|
||||||
|
* be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with XXX. If not, see
|
||||||
|
* <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package li.strolch.runtime.agent;
|
||||||
|
|
||||||
|
import java.text.MessageFormat;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import li.strolch.model.StrolchElement;
|
||||||
|
import ch.eitchnet.utils.helper.StringHelper;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public abstract class InMemoryElementMap<T extends StrolchElement> implements ElementMap<T> {
|
||||||
|
|
||||||
|
private Map<String, Map<String, T>> elementMap;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public T getBy(String type, String id) {
|
||||||
|
if (StringHelper.isEmpty(type) || StringHelper.isEmpty(id))
|
||||||
|
throw new IllegalArgumentException("type and id may not be null!"); //$NON-NLS-1$
|
||||||
|
|
||||||
|
Map<String, T> byTypeMap = this.elementMap.get(type);
|
||||||
|
if (byTypeMap == null)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
return byTypeMap.get(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void add(T element) {
|
||||||
|
if (element == null)
|
||||||
|
throw new IllegalArgumentException("element may not be null!"); //$NON-NLS-1$
|
||||||
|
|
||||||
|
String type = element.getType();
|
||||||
|
Map<String, T> byTypeMap = getByTypeMap(type);
|
||||||
|
|
||||||
|
if (byTypeMap.containsKey(element.getId())) {
|
||||||
|
String msg = MessageFormat.format("The element already exists with the locator {0}", element.getLocator()); //$NON-NLS-1$
|
||||||
|
throw new IllegalStateException(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
byTypeMap.put(element.getId(), element);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Map<String, T> getByTypeMap(String type) {
|
||||||
|
Map<String, T> byTypeMap = this.elementMap.get(type);
|
||||||
|
if (byTypeMap == null) {
|
||||||
|
byTypeMap = new HashMap<>();
|
||||||
|
this.elementMap.put(type, byTypeMap);
|
||||||
|
}
|
||||||
|
return byTypeMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void update(T element) {
|
||||||
|
if (element == null)
|
||||||
|
throw new IllegalArgumentException("element may not be null!"); //$NON-NLS-1$
|
||||||
|
|
||||||
|
String type = element.getType();
|
||||||
|
Map<String, T> byTypeMap = getByTypeMap(type);
|
||||||
|
if (!byTypeMap.containsKey(element.getId())) {
|
||||||
|
String msg = "The element can not be updated as it does not exist in map with locator {0}"; //$NON-NLS-1$
|
||||||
|
msg = MessageFormat.format(msg, element.getLocator());
|
||||||
|
throw new IllegalStateException(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
byTypeMap.remove(element.getId());
|
||||||
|
byTypeMap.put(element.getId(), element);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void remove(T element) {
|
||||||
|
if (element == null)
|
||||||
|
throw new IllegalArgumentException("element may not be null!"); //$NON-NLS-1$
|
||||||
|
|
||||||
|
String type = element.getType();
|
||||||
|
Map<String, T> byTypeMap = getByTypeMap(type);
|
||||||
|
if (!byTypeMap.containsKey(element.getId())) {
|
||||||
|
String msg = "The element can not be removed as it does not exist in map with locator {0}"; //$NON-NLS-1$
|
||||||
|
msg = MessageFormat.format(msg, element.getLocator());
|
||||||
|
throw new IllegalStateException(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
byTypeMap.remove(element.getId());
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,33 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2012, Robert von Burg
|
||||||
|
*
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This file is part of the XXX.
|
||||||
|
*
|
||||||
|
* XXX is free software: you can redistribute
|
||||||
|
* it and/or modify it under the terms of the GNU General Public License as
|
||||||
|
* published by the Free Software Foundation, either version 3 of the License,
|
||||||
|
* or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* XXX is distributed in the hope that it will
|
||||||
|
* be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with XXX. If not, see
|
||||||
|
* <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package li.strolch.runtime.agent;
|
||||||
|
|
||||||
|
import li.strolch.model.Order;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class InMemoryOrderMap extends InMemoryElementMap<Order> implements OrderMap {
|
||||||
|
|
||||||
|
//
|
||||||
|
}
|
|
@ -0,0 +1,33 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2012, Robert von Burg
|
||||||
|
*
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This file is part of the XXX.
|
||||||
|
*
|
||||||
|
* XXX is free software: you can redistribute
|
||||||
|
* it and/or modify it under the terms of the GNU General Public License as
|
||||||
|
* published by the Free Software Foundation, either version 3 of the License,
|
||||||
|
* or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* XXX is distributed in the hope that it will
|
||||||
|
* be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with XXX. If not, see
|
||||||
|
* <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package li.strolch.runtime.agent;
|
||||||
|
|
||||||
|
import li.strolch.model.Resource;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class InMemoryResourceMap extends InMemoryElementMap<Resource> implements ResourceMap {
|
||||||
|
|
||||||
|
//
|
||||||
|
}
|
|
@ -0,0 +1,188 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2012, Robert von Burg
|
||||||
|
*
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This file is part of the XXX.
|
||||||
|
*
|
||||||
|
* XXX is free software: you can redistribute
|
||||||
|
* it and/or modify it under the terms of the GNU General Public License as
|
||||||
|
* published by the Free Software Foundation, either version 3 of the License,
|
||||||
|
* or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* XXX is distributed in the hope that it will
|
||||||
|
* be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with XXX. If not, see
|
||||||
|
* <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package li.strolch.runtime.agent;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.text.MessageFormat;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
import javax.xml.parsers.ParserConfigurationException;
|
||||||
|
import javax.xml.parsers.SAXParser;
|
||||||
|
import javax.xml.parsers.SAXParserFactory;
|
||||||
|
|
||||||
|
import li.strolch.exception.StrolchException;
|
||||||
|
import li.strolch.model.Order;
|
||||||
|
import li.strolch.model.ParameterBag;
|
||||||
|
import li.strolch.model.Resource;
|
||||||
|
import li.strolch.model.State;
|
||||||
|
import li.strolch.model.Tags;
|
||||||
|
import li.strolch.model.parameter.BooleanParameter;
|
||||||
|
import li.strolch.model.parameter.DateParameter;
|
||||||
|
import li.strolch.model.parameter.FloatParameter;
|
||||||
|
import li.strolch.model.parameter.IntegerParameter;
|
||||||
|
import li.strolch.model.parameter.LongParameter;
|
||||||
|
import li.strolch.model.parameter.Parameter;
|
||||||
|
import li.strolch.model.parameter.StringListParameter;
|
||||||
|
import li.strolch.model.parameter.StringParameter;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.xml.sax.Attributes;
|
||||||
|
import org.xml.sax.SAXException;
|
||||||
|
import org.xml.sax.helpers.DefaultHandler;
|
||||||
|
|
||||||
|
import ch.eitchnet.utils.helper.StringHelper;
|
||||||
|
import ch.eitchnet.utils.iso8601.ISO8601FormatFactory;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class ModelFileDefaultHandler extends DefaultHandler {
|
||||||
|
|
||||||
|
private static final Logger logger = LoggerFactory.getLogger(ModelFileDefaultHandler.class);
|
||||||
|
|
||||||
|
private File modelFile;
|
||||||
|
|
||||||
|
private Resource resource;
|
||||||
|
private Order order;
|
||||||
|
private ParameterBag pBag;
|
||||||
|
|
||||||
|
public ModelFileDefaultHandler(File modelFile) {
|
||||||
|
this.modelFile = modelFile;
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("nls")
|
||||||
|
@Override
|
||||||
|
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
|
||||||
|
|
||||||
|
switch (qName) {
|
||||||
|
case Tags.RESOURCE:
|
||||||
|
String resId = attributes.getValue(Tags.ID);
|
||||||
|
String resName = attributes.getValue(Tags.NAME);
|
||||||
|
String resType = attributes.getValue(Tags.TYPE);
|
||||||
|
Resource resource = new Resource(resId, resName, resType);
|
||||||
|
this.resource = resource;
|
||||||
|
break;
|
||||||
|
case Tags.ORDER:
|
||||||
|
String orderId = attributes.getValue(Tags.ID);
|
||||||
|
String orderName = attributes.getValue(Tags.NAME);
|
||||||
|
String orderType = attributes.getValue(Tags.TYPE);
|
||||||
|
String orderDateS = attributes.getValue(Tags.DATE);
|
||||||
|
String orderStateS = attributes.getValue(Tags.STATE);
|
||||||
|
Date orderDate = ISO8601FormatFactory.getInstance().getDateFormat().parse(orderDateS);
|
||||||
|
State orderState = State.valueOf(orderStateS);
|
||||||
|
Order order = new Order(orderId, orderName, orderType, orderDate, orderState);
|
||||||
|
this.order = order;
|
||||||
|
break;
|
||||||
|
case Tags.PARAMETER_BAG:
|
||||||
|
String pBagId = attributes.getValue(Tags.ID);
|
||||||
|
String pBagName = attributes.getValue(Tags.NAME);
|
||||||
|
String pBagType = attributes.getValue(Tags.TYPE);
|
||||||
|
ParameterBag pBag = new ParameterBag(pBagId, pBagName, pBagType);
|
||||||
|
this.pBag = pBag;
|
||||||
|
break;
|
||||||
|
case Tags.PARAMETER:
|
||||||
|
String paramId = attributes.getValue(Tags.ID);
|
||||||
|
String paramName = attributes.getValue(Tags.NAME);
|
||||||
|
String paramType = attributes.getValue(Tags.TYPE);
|
||||||
|
String paramValue = attributes.getValue(Tags.VALUE);
|
||||||
|
String paramHiddenS = attributes.getValue(Tags.HIDDEN);
|
||||||
|
boolean paramHidden = StringHelper.parseBoolean(paramHiddenS);
|
||||||
|
String paramUom = attributes.getValue(Tags.UOM);
|
||||||
|
String paramInterpretation = attributes.getValue(Tags.INTERPRETATION);
|
||||||
|
Parameter<?> param;
|
||||||
|
switch (paramType) {
|
||||||
|
case StringParameter.TYPE:
|
||||||
|
param = new StringParameter(paramId, paramName, paramValue);
|
||||||
|
break;
|
||||||
|
case IntegerParameter.TYPE:
|
||||||
|
param = new IntegerParameter(paramId, paramName, IntegerParameter.parseFromString(paramValue));
|
||||||
|
break;
|
||||||
|
case BooleanParameter.TYPE:
|
||||||
|
param = new BooleanParameter(paramId, paramName, BooleanParameter.parseFromString(paramValue));
|
||||||
|
break;
|
||||||
|
case LongParameter.TYPE:
|
||||||
|
param = new LongParameter(paramId, paramName, LongParameter.parseFromString(paramValue));
|
||||||
|
break;
|
||||||
|
case DateParameter.TYPE:
|
||||||
|
param = new DateParameter(paramId, paramName, DateParameter.parseFromString(paramValue));
|
||||||
|
break;
|
||||||
|
case StringListParameter.TYPE:
|
||||||
|
param = new StringListParameter(paramId, paramName, StringListParameter.parseFromString(paramValue));
|
||||||
|
break;
|
||||||
|
case FloatParameter.TYPE:
|
||||||
|
param = new FloatParameter(paramId, paramName, FloatParameter.parseFromString(paramValue));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new UnsupportedOperationException("Parameters of type " + paramType + " are not supported!");
|
||||||
|
}
|
||||||
|
param.setHidden(paramHidden);
|
||||||
|
param.setUom(paramUom);
|
||||||
|
param.setInterpretation(paramInterpretation);
|
||||||
|
this.pBag.addParameter(param);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new IllegalArgumentException("The element '" + qName + "' is unhandled!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void endElement(String uri, String localName, String qName) throws SAXException {
|
||||||
|
|
||||||
|
switch (qName) {
|
||||||
|
case Tags.RESOURCE:
|
||||||
|
this.resource = null;
|
||||||
|
break;
|
||||||
|
case Tags.ORDER:
|
||||||
|
this.order = null;
|
||||||
|
break;
|
||||||
|
case Tags.PARAMETER_BAG:
|
||||||
|
this.pBag = null;
|
||||||
|
break;
|
||||||
|
case Tags.PARAMETER:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new IllegalArgumentException("The element '" + qName + "' is unhandled!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void parseFile() {
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
SAXParserFactory spf = SAXParserFactory.newInstance();
|
||||||
|
SAXParser sp = spf.newSAXParser();
|
||||||
|
|
||||||
|
sp.parse(this.modelFile, this);
|
||||||
|
|
||||||
|
String msg = "SAX parsed model file {0}"; //$NON-NLS-1$
|
||||||
|
logger.info(MessageFormat.format(msg, this.modelFile.getAbsolutePath()));
|
||||||
|
|
||||||
|
} catch (ParserConfigurationException | SAXException | IOException e) {
|
||||||
|
|
||||||
|
String msg = "Parsing failed due to internal error: {0}"; //$NON-NLS-1$
|
||||||
|
throw new StrolchException(MessageFormat.format(msg, e.getMessage()), e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,33 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2012, Robert von Burg
|
||||||
|
*
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This file is part of the XXX.
|
||||||
|
*
|
||||||
|
* XXX is free software: you can redistribute
|
||||||
|
* it and/or modify it under the terms of the GNU General Public License as
|
||||||
|
* published by the Free Software Foundation, either version 3 of the License,
|
||||||
|
* or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* XXX is distributed in the hope that it will
|
||||||
|
* be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with XXX. If not, see
|
||||||
|
* <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package li.strolch.runtime.agent;
|
||||||
|
|
||||||
|
import li.strolch.model.Order;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public interface OrderMap extends ElementMap<Order> {
|
||||||
|
|
||||||
|
//
|
||||||
|
}
|
|
@ -0,0 +1,33 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2012, Robert von Burg
|
||||||
|
*
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This file is part of the XXX.
|
||||||
|
*
|
||||||
|
* XXX is free software: you can redistribute
|
||||||
|
* it and/or modify it under the terms of the GNU General Public License as
|
||||||
|
* published by the Free Software Foundation, either version 3 of the License,
|
||||||
|
* or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* XXX is distributed in the hope that it will
|
||||||
|
* be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with XXX. If not, see
|
||||||
|
* <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package li.strolch.runtime.agent;
|
||||||
|
|
||||||
|
import li.strolch.model.Resource;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public interface ResourceMap extends ElementMap<Resource> {
|
||||||
|
|
||||||
|
//
|
||||||
|
}
|
|
@ -0,0 +1,106 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2012, Robert von Burg
|
||||||
|
*
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This file is part of the XXX.
|
||||||
|
*
|
||||||
|
* XXX is free software: you can redistribute
|
||||||
|
* it and/or modify it under the terms of the GNU General Public License as
|
||||||
|
* published by the Free Software Foundation, either version 3 of the License,
|
||||||
|
* or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* XXX is distributed in the hope that it will
|
||||||
|
* be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with XXX. If not, see
|
||||||
|
* <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package li.strolch.runtime.agent;
|
||||||
|
|
||||||
|
import li.strolch.runtime.component.ComponentContainer;
|
||||||
|
import li.strolch.runtime.component.StrolchComponent;
|
||||||
|
import li.strolch.runtime.configuration.ComponentConfiguration;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class StrolchAgent extends StrolchComponent {
|
||||||
|
|
||||||
|
public static final String PROP_DATA_STORE_MODE = "dataStoreMode"; //$NON-NLS-1$
|
||||||
|
|
||||||
|
private ResourceMap resourceMap;
|
||||||
|
private OrderMap orderMap;
|
||||||
|
private AgentLifecycleController agentInitializer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param container
|
||||||
|
* @param componentName
|
||||||
|
*/
|
||||||
|
public StrolchAgent(ComponentContainer container, String componentName) {
|
||||||
|
super(container, componentName);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param resourceMap
|
||||||
|
* the resourceMap to set
|
||||||
|
*/
|
||||||
|
void setResourceMap(ResourceMap resourceMap) {
|
||||||
|
this.resourceMap = resourceMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param orderMap
|
||||||
|
* the orderMap to set
|
||||||
|
*/
|
||||||
|
void setOrderMap(OrderMap orderMap) {
|
||||||
|
this.orderMap = orderMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the resourceMap
|
||||||
|
*/
|
||||||
|
public ResourceMap getResourceMap() {
|
||||||
|
return this.resourceMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the orderMap
|
||||||
|
*/
|
||||||
|
public OrderMap getOrderMap() {
|
||||||
|
return this.orderMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void initialize(ComponentConfiguration configuration) {
|
||||||
|
|
||||||
|
DataStoreMode dataStoreMode = DataStoreMode.parseDataStoreMode(configuration.getString(PROP_DATA_STORE_MODE,
|
||||||
|
null));
|
||||||
|
this.agentInitializer = dataStoreMode.getAgentLifecycleController(this, configuration);
|
||||||
|
this.agentInitializer.initialize();
|
||||||
|
|
||||||
|
super.initialize(configuration);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void start() {
|
||||||
|
this.agentInitializer.start();
|
||||||
|
super.start();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void stop() {
|
||||||
|
this.agentInitializer.stop();
|
||||||
|
super.stop();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void destroy() {
|
||||||
|
this.agentInitializer.destroy();
|
||||||
|
super.destroy();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,54 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2012, Robert von Burg
|
||||||
|
*
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This file is part of the XXX.
|
||||||
|
*
|
||||||
|
* XXX is free software: you can redistribute
|
||||||
|
* it and/or modify it under the terms of the GNU General Public License as
|
||||||
|
* published by the Free Software Foundation, either version 3 of the License,
|
||||||
|
* or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* XXX is distributed in the hope that it will
|
||||||
|
* be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with XXX. If not, see
|
||||||
|
* <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package li.strolch.runtime.agent;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
|
import li.strolch.runtime.configuration.ComponentConfiguration;
|
||||||
|
import li.strolch.runtime.configuration.RuntimeConfiguration;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class TransientDataStoreModeAgentInitializer extends EmptyDataStoreModeAgentInitializer {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param strolchAgent
|
||||||
|
* @param configuration
|
||||||
|
*/
|
||||||
|
public TransientDataStoreModeAgentInitializer(StrolchAgent strolchAgent, ComponentConfiguration configuration) {
|
||||||
|
super(strolchAgent, configuration);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void start() {
|
||||||
|
|
||||||
|
RuntimeConfiguration runtimeConfiguration = this.configuration.getRuntimeConfiguration();
|
||||||
|
File modelFile = this.configuration.getDataFile(PROP_DATA_STORE_MODEL_FILE, null, runtimeConfiguration, true);
|
||||||
|
|
||||||
|
ModelFileDefaultHandler handler = new ModelFileDefaultHandler(modelFile);
|
||||||
|
handler.parseFile();
|
||||||
|
|
||||||
|
super.start();
|
||||||
|
}
|
||||||
|
}
|
|
@ -32,14 +32,7 @@ public abstract class AbstractionConfiguration {
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getString(String key, String defValue) {
|
public String getString(String key, String defValue) {
|
||||||
String value = this.configurationValues.get(key);
|
return getValue(key, defValue);
|
||||||
if (!StringHelper.isEmpty(value)) {
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
assertDefValueExist(key, defValue);
|
|
||||||
logDefValueUse(key, defValue);
|
|
||||||
return defValue;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean getBoolean(String key, Boolean defValue) {
|
public boolean getBoolean(String key, Boolean defValue) {
|
||||||
|
@ -96,22 +89,38 @@ public abstract class AbstractionConfiguration {
|
||||||
return defValue;
|
return defValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
public File getConfigFile(String key, String defValue, ComponentConfiguration configuration) {
|
public File getConfigFile(String key, String defValue, RuntimeConfiguration configuration) {
|
||||||
|
String value = getValue(key, defValue);
|
||||||
|
|
||||||
|
File configFile = new File(configuration.getConfigPath(), value);
|
||||||
|
if (!configFile.isFile() || !configFile.canRead()) {
|
||||||
|
String msg = "Component {0} requires configuration file ''{1}'' which does not exist with value: {2}"; //$NON-NLS-1$
|
||||||
|
msg = MessageFormat.format(msg, this.name, key, value);
|
||||||
|
throw new StrolchConfigurationException(msg);
|
||||||
|
}
|
||||||
|
return configFile;
|
||||||
|
}
|
||||||
|
|
||||||
|
public File getDataFile(String key, String defValue, RuntimeConfiguration configuration, boolean checkExists) {
|
||||||
|
String value = getValue(key, defValue);
|
||||||
|
|
||||||
|
File dataFile = new File(configuration.getDataPath(), value);
|
||||||
|
if (checkExists && !dataFile.isFile() || !dataFile.canRead()) {
|
||||||
|
String msg = "Component {0} requires data file ''{1}'' which does not exist with value: {2}"; //$NON-NLS-1$
|
||||||
|
msg = MessageFormat.format(msg, this.name, key, value);
|
||||||
|
throw new StrolchConfigurationException(msg);
|
||||||
|
}
|
||||||
|
return dataFile;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getValue(String key, String defValue) {
|
||||||
String value = this.configurationValues.get(key);
|
String value = this.configurationValues.get(key);
|
||||||
if (StringHelper.isEmpty(value)) {
|
if (StringHelper.isEmpty(value)) {
|
||||||
assertDefValueExist(key, defValue);
|
assertDefValueExist(key, defValue);
|
||||||
logDefValueUse(key, defValue);
|
logDefValueUse(key, defValue);
|
||||||
value = defValue;
|
value = defValue;
|
||||||
}
|
}
|
||||||
|
return value;
|
||||||
File configFile = new File(configuration.getRuntimeConfiguration().getConfigPath(), value);
|
|
||||||
if (!configFile.isFile() || !configFile.canRead()) {
|
|
||||||
|
|
||||||
String msg = "Component {0} is missing required configuration file {1}!"; //$NON-NLS-1$
|
|
||||||
msg = MessageFormat.format(msg, this.name, key, value);
|
|
||||||
throw new StrolchConfigurationException(msg);
|
|
||||||
}
|
|
||||||
return configFile;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void logDefValueUse(String key, Object defValue) {
|
private void logDefValueUse(String key, Object defValue) {
|
||||||
|
|
|
@ -8,13 +8,16 @@ public class RuntimeConfiguration extends AbstractionConfiguration {
|
||||||
|
|
||||||
public static final String RUNTIME = "Runtime"; //$NON-NLS-1$
|
public static final String RUNTIME = "Runtime"; //$NON-NLS-1$
|
||||||
public static final String PATH_CONFIG = "config"; //$NON-NLS-1$
|
public static final String PATH_CONFIG = "config"; //$NON-NLS-1$
|
||||||
|
public static final String PATH_DATA = "data"; //$NON-NLS-1$
|
||||||
|
|
||||||
private final String applicationName;
|
private final String applicationName;
|
||||||
private final File rootPath;
|
private final File rootPath;
|
||||||
private final File configPath;
|
private final File configPath;
|
||||||
|
private final File dataPath;
|
||||||
|
|
||||||
public RuntimeConfiguration(String applicationName, Map<String, String> configurationValues, File rootPathF) {
|
public RuntimeConfiguration(String applicationName, Map<String, String> configurationValues, File rootPathF) {
|
||||||
super(RUNTIME, configurationValues);
|
super(RUNTIME, configurationValues);
|
||||||
|
|
||||||
if (!rootPathF.isDirectory() || !rootPathF.canRead()) {
|
if (!rootPathF.isDirectory() || !rootPathF.canRead()) {
|
||||||
String msg = "Root path is not readable at {0}"; //$NON-NLS-1$
|
String msg = "Root path is not readable at {0}"; //$NON-NLS-1$
|
||||||
msg = MessageFormat.format(msg, rootPathF.getAbsolutePath());
|
msg = MessageFormat.format(msg, rootPathF.getAbsolutePath());
|
||||||
|
@ -28,9 +31,22 @@ public class RuntimeConfiguration extends AbstractionConfiguration {
|
||||||
throw new StrolchConfigurationException(msg);
|
throw new StrolchConfigurationException(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
File dataPathF = new File(rootPathF, PATH_CONFIG);
|
||||||
|
if (!dataPathF.exists() && !dataPathF.mkdir()) {
|
||||||
|
String msg = "Could not create missing data path at {0}"; //$NON-NLS-1$
|
||||||
|
msg = MessageFormat.format(msg, configPathF);
|
||||||
|
throw new StrolchConfigurationException(msg);
|
||||||
|
}
|
||||||
|
if (!dataPathF.isDirectory() || !dataPathF.canRead() || !dataPathF.canWrite()) {
|
||||||
|
String msg = "Data path is not a directory or readable or writeable at {0}"; //$NON-NLS-1$
|
||||||
|
msg = MessageFormat.format(msg, configPathF);
|
||||||
|
throw new StrolchConfigurationException(msg);
|
||||||
|
}
|
||||||
|
|
||||||
this.applicationName = applicationName;
|
this.applicationName = applicationName;
|
||||||
this.rootPath = rootPathF;
|
this.rootPath = rootPathF;
|
||||||
this.configPath = configPathF;
|
this.configPath = configPathF;
|
||||||
|
this.dataPath = dataPathF;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getApplicationName() {
|
public String getApplicationName() {
|
||||||
|
@ -44,4 +60,8 @@ public class RuntimeConfiguration extends AbstractionConfiguration {
|
||||||
public File getConfigPath() {
|
public File getConfigPath() {
|
||||||
return this.configPath;
|
return this.configPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public File getDataPath() {
|
||||||
|
return this.dataPath;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ import java.io.File;
|
||||||
import li.strolch.runtime.component.ComponentContainer;
|
import li.strolch.runtime.component.ComponentContainer;
|
||||||
import li.strolch.runtime.component.StrolchComponent;
|
import li.strolch.runtime.component.StrolchComponent;
|
||||||
import li.strolch.runtime.configuration.ComponentConfiguration;
|
import li.strolch.runtime.configuration.ComponentConfiguration;
|
||||||
|
import li.strolch.runtime.configuration.RuntimeConfiguration;
|
||||||
import ch.eitchnet.privilege.base.PrivilegeException;
|
import ch.eitchnet.privilege.base.PrivilegeException;
|
||||||
import ch.eitchnet.privilege.handler.PrivilegeHandler;
|
import ch.eitchnet.privilege.handler.PrivilegeHandler;
|
||||||
import ch.eitchnet.privilege.handler.SystemUserAction;
|
import ch.eitchnet.privilege.handler.SystemUserAction;
|
||||||
|
@ -28,8 +29,9 @@ public class DefaultStrolchPrivilegeHandler extends StrolchComponent implements
|
||||||
super.initialize(configuration);
|
super.initialize(configuration);
|
||||||
|
|
||||||
// initialize privilege
|
// initialize privilege
|
||||||
|
RuntimeConfiguration runtimeConfiguration = configuration.getRuntimeConfiguration();
|
||||||
File privilegeConfigFile = configuration.getConfigFile(PROP_PRIVILEGE_CONFIG_FILE, PRIVILEGE_CONFIG_XML,
|
File privilegeConfigFile = configuration.getConfigFile(PROP_PRIVILEGE_CONFIG_FILE, PRIVILEGE_CONFIG_XML,
|
||||||
configuration);
|
runtimeConfiguration);
|
||||||
PrivilegeHandler privilegeHandler = PrivilegeInitializationHelper.initializeFromXml(privilegeConfigFile);
|
PrivilegeHandler privilegeHandler = PrivilegeInitializationHelper.initializeFromXml(privilegeConfigFile);
|
||||||
this.privilegeHandler = privilegeHandler;
|
this.privilegeHandler = privilegeHandler;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2012, Robert von Burg
|
||||||
|
*
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This file is part of the XXX.
|
||||||
|
*
|
||||||
|
* XXX is free software: you can redistribute
|
||||||
|
* it and/or modify it under the terms of the GNU General Public License as
|
||||||
|
* published by the Free Software Foundation, either version 3 of the License,
|
||||||
|
* or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* XXX is distributed in the hope that it will
|
||||||
|
* be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with XXX. If not, see
|
||||||
|
* <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package li.strolch.runtime.query;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class ByElementSelection {
|
||||||
|
|
||||||
|
private String id;
|
||||||
|
private String name;
|
||||||
|
private String type;
|
||||||
|
}
|
|
@ -0,0 +1,42 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2012, Robert von Burg
|
||||||
|
*
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This file is part of the XXX.
|
||||||
|
*
|
||||||
|
* XXX is free software: you can redistribute
|
||||||
|
* it and/or modify it under the terms of the GNU General Public License as
|
||||||
|
* published by the Free Software Foundation, either version 3 of the License,
|
||||||
|
* or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* XXX is distributed in the hope that it will
|
||||||
|
* be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with XXX. If not, see
|
||||||
|
* <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package li.strolch.runtime.query;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import li.strolch.model.Resource;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class ResourceQuery {
|
||||||
|
|
||||||
|
|
||||||
|
private String byType;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public void accept(ResourceQueryVisitor visitor) {
|
||||||
|
visitor.visit(this);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2012, Robert von Burg
|
||||||
|
*
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This file is part of the XXX.
|
||||||
|
*
|
||||||
|
* XXX is free software: you can redistribute
|
||||||
|
* it and/or modify it under the terms of the GNU General Public License as
|
||||||
|
* published by the Free Software Foundation, either version 3 of the License,
|
||||||
|
* or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* XXX is distributed in the hope that it will
|
||||||
|
* be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with XXX. If not, see
|
||||||
|
* <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package li.strolch.runtime.query;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public interface ResourceQueryVisitor {
|
||||||
|
|
||||||
|
public void visit(ResourceQuery query);
|
||||||
|
}
|
|
@ -0,0 +1,45 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2012, Robert von Burg
|
||||||
|
*
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This file is part of the XXX.
|
||||||
|
*
|
||||||
|
* XXX is free software: you can redistribute
|
||||||
|
* it and/or modify it under the terms of the GNU General Public License as
|
||||||
|
* published by the Free Software Foundation, either version 3 of the License,
|
||||||
|
* or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* XXX is distributed in the hope that it will
|
||||||
|
* be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with XXX. If not, see
|
||||||
|
* <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package li.strolch.runtime.query;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class TypeSelection {
|
||||||
|
|
||||||
|
private String type;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param type
|
||||||
|
*/
|
||||||
|
public TypeSelection(String type) {
|
||||||
|
this.type = type;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the type
|
||||||
|
*/
|
||||||
|
public String getType() {
|
||||||
|
return this.type;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,55 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2012, Robert von Burg
|
||||||
|
*
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This file is part of the XXX.
|
||||||
|
*
|
||||||
|
* XXX is free software: you can redistribute
|
||||||
|
* it and/or modify it under the terms of the GNU General Public License as
|
||||||
|
* published by the Free Software Foundation, either version 3 of the License,
|
||||||
|
* or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* XXX is distributed in the hope that it will
|
||||||
|
* be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with XXX. If not, see
|
||||||
|
* <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package li.strolch.runtime.query.inmemory;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import li.strolch.model.Resource;
|
||||||
|
import li.strolch.runtime.component.ComponentContainer;
|
||||||
|
import li.strolch.runtime.query.ResourceQuery;
|
||||||
|
import li.strolch.runtime.query.ResourceQueryVisitor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class InMemoryResourceQueryVisitor implements ResourceQueryVisitor {
|
||||||
|
|
||||||
|
private ArrayList<Resource> result;
|
||||||
|
|
||||||
|
public List<Resource> performQuery(ComponentContainer container, ResourceQuery query) {
|
||||||
|
this.result = new ArrayList<>();
|
||||||
|
|
||||||
|
query.accept(this);
|
||||||
|
|
||||||
|
return this.result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void visit(ResourceQuery resourceQuery) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,45 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2012, Robert von Burg
|
||||||
|
*
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This file is part of the XXX.
|
||||||
|
*
|
||||||
|
* XXX is free software: you can redistribute
|
||||||
|
* it and/or modify it under the terms of the GNU General Public License as
|
||||||
|
* published by the Free Software Foundation, either version 3 of the License,
|
||||||
|
* or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* XXX is distributed in the hope that it will
|
||||||
|
* be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with XXX. If not, see
|
||||||
|
* <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package li.strolch.runtime;
|
||||||
|
|
||||||
|
import org.junit.Ignore;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("nls")
|
||||||
|
public class QueryTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Ignore
|
||||||
|
public void shouldQueryResourceWithParamValue() {
|
||||||
|
|
||||||
|
// ResourceQuery resQuery = new ResourceQuery();
|
||||||
|
// resQuery.with(new TypeMatcher("MyType"));
|
||||||
|
// resQuery.with(new ParameterBagMatcher("Bla").with(ParameterMatcher.stringValue("color", "red")));
|
||||||
|
//
|
||||||
|
// List<Resource> result = resQuery.doQuery();
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -6,10 +6,20 @@
|
||||||
<verbose>true</verbose>
|
<verbose>true</verbose>
|
||||||
</Properties>
|
</Properties>
|
||||||
</Runtime>
|
</Runtime>
|
||||||
|
<Component>
|
||||||
|
<name>Agent</name>
|
||||||
|
<api>li.strolch.runtime.agent.StrolchAgent</api>
|
||||||
|
<impl>li.strolch.runtime.agent.StrolchAgent</impl>
|
||||||
|
<Properties>
|
||||||
|
<dataStoreMode>EMPTY</dataStoreMode>
|
||||||
|
<dataStoreModelFile>StrolcheModel.xml</dataStoreModelFile>
|
||||||
|
</Properties>
|
||||||
|
</Component>
|
||||||
<Component>
|
<Component>
|
||||||
<name>ServiceHandler</name>
|
<name>ServiceHandler</name>
|
||||||
<api>li.strolch.service.ServiceHandler</api>
|
<api>li.strolch.service.ServiceHandler</api>
|
||||||
<impl>li.strolch.service.SimpleServiceHandler</impl>
|
<impl>li.strolch.service.SimpleServiceHandler</impl>
|
||||||
|
<depends>Agent</depends>
|
||||||
<Properties>
|
<Properties>
|
||||||
</Properties>
|
</Properties>
|
||||||
</Component>
|
</Component>
|
||||||
|
|
|
@ -6,10 +6,20 @@
|
||||||
<verbose>true</verbose>
|
<verbose>true</verbose>
|
||||||
</Properties>
|
</Properties>
|
||||||
</Runtime>
|
</Runtime>
|
||||||
|
<Component>
|
||||||
|
<name>Agent</name>
|
||||||
|
<api>li.strolch.runtime.agent.StrolchAgent</api>
|
||||||
|
<impl>li.strolch.runtime.agent.StrolchAgent</impl>
|
||||||
|
<Properties>
|
||||||
|
<dataStoreMode>EMPTY</dataStoreMode>
|
||||||
|
<dataStoreModelFile>StrolcheModel.xml</dataStoreModelFile>
|
||||||
|
</Properties>
|
||||||
|
</Component>
|
||||||
<Component>
|
<Component>
|
||||||
<name>ServiceHandler</name>
|
<name>ServiceHandler</name>
|
||||||
<api>li.strolch.runtime.test.ServiceHandlerTest</api>
|
<api>li.strolch.runtime.test.ServiceHandlerTest</api>
|
||||||
<impl>li.strolch.runtime.test.ServiceHandlerTestImpl</impl>
|
<impl>li.strolch.runtime.test.ServiceHandlerTestImpl</impl>
|
||||||
|
<depends>Agent</depends>
|
||||||
<Properties>
|
<Properties>
|
||||||
</Properties>
|
</Properties>
|
||||||
</Component>
|
</Component>
|
||||||
|
|
Loading…
Reference in New Issue