From 743e1c039bad8e7e0c1c30db7176cb1805d208d7 Mon Sep 17 00:00:00 2001 From: Robert von Burg Date: Thu, 30 Jan 2014 00:21:13 +0100 Subject: [PATCH] [New] Implemented Export and Import model services and commands --- .../model/GroupedParameterizedElement.java | 11 ++- .../strolch/model/ParameterizedElement.java | 13 ++- .../model/xml/AbstractToSaxWriterVisitor.java | 96 +++++++++++++++++++ .../model/xml/OrderToSaxWriterVisitor.java | 47 +++++++++ .../model/xml/ResourceToSaxWriterVisitor.java | 47 +++++++++ ...andler.java => XmlModelSaxFileReader.java} | 6 +- ...ultHandler.java => XmlModelSaxReader.java} | 7 +- .../model/XmlModelDefaultHandlerTest.java | 6 +- 8 files changed, 220 insertions(+), 13 deletions(-) create mode 100644 src/main/java/li/strolch/model/xml/AbstractToSaxWriterVisitor.java create mode 100644 src/main/java/li/strolch/model/xml/OrderToSaxWriterVisitor.java create mode 100644 src/main/java/li/strolch/model/xml/ResourceToSaxWriterVisitor.java rename src/main/java/li/strolch/model/xml/{XmlModelFileHandler.java => XmlModelSaxFileReader.java} (93%) rename src/main/java/li/strolch/model/xml/{XmlModelDefaultHandler.java => XmlModelSaxReader.java} (97%) diff --git a/src/main/java/li/strolch/model/GroupedParameterizedElement.java b/src/main/java/li/strolch/model/GroupedParameterizedElement.java index 4ed7f2ae3..16e7f04d6 100644 --- a/src/main/java/li/strolch/model/GroupedParameterizedElement.java +++ b/src/main/java/li/strolch/model/GroupedParameterizedElement.java @@ -186,6 +186,15 @@ public abstract class GroupedParameterizedElement extends AbstractStrolchElement return this.parameterBagMap.remove(key); } + /** + * Returns true if this {@link GroupedParameterizedElement} has any {@link ParameterBag ParameterBag} + * + * @return true if this {@link GroupedParameterizedElement} has any {@link ParameterBag ParameterBag} + */ + public boolean hasParameterBags() { + return this.parameterBagMap != null && !this.parameterBagMap.isEmpty(); + } + /** * Returns true if the {@link ParameterBag} with the given key exists on this {@link GroupedParameterizedElement}. * @@ -194,7 +203,7 @@ public abstract class GroupedParameterizedElement extends AbstractStrolchElement * @return true if the {@link ParameterBag} with the given key exists on this {@link GroupedParameterizedElement}. */ public boolean hasParameterBag(String bagKey) { - return this.parameterBagMap != null && this.parameterBagMap.containsKey(bagKey); + return this.parameterBagMap != null && this.parameterBagMap.containsKey(bagKey); } /** diff --git a/src/main/java/li/strolch/model/ParameterizedElement.java b/src/main/java/li/strolch/model/ParameterizedElement.java index 3db4eab35..aff782c3e 100644 --- a/src/main/java/li/strolch/model/ParameterizedElement.java +++ b/src/main/java/li/strolch/model/ParameterizedElement.java @@ -165,6 +165,15 @@ public abstract class ParameterizedElement extends AbstractStrolchElement { return new ArrayList>(this.parameterMap.values()); } + /** + * Returns true, if the this {@link ParameterizedElement} has any {@link Parameter Parameters}, false otherwise + * + * @return true, if the this {@link ParameterizedElement} has any {@link Parameter Parameters}, false otherwise + */ + public boolean hasParameters() { + return this.parameterMap != null && !this.parameterMap.isEmpty(); + } + /** * Returns true, if the {@link Parameter} exists with the given key, false otherwise * @@ -261,8 +270,8 @@ public abstract class ParameterizedElement extends AbstractStrolchElement { super.fillClone(clone); ParameterizedElement peClone = (ParameterizedElement) clone; peClone.setType(this.type); - if(this.parameterMap != null) { - for(Parameter param : this.parameterMap.values()) { + if (this.parameterMap != null) { + for (Parameter param : this.parameterMap.values()) { peClone.addParameter(param.getClone()); } } diff --git a/src/main/java/li/strolch/model/xml/AbstractToSaxWriterVisitor.java b/src/main/java/li/strolch/model/xml/AbstractToSaxWriterVisitor.java new file mode 100644 index 000000000..4ac7c3cc5 --- /dev/null +++ b/src/main/java/li/strolch/model/xml/AbstractToSaxWriterVisitor.java @@ -0,0 +1,96 @@ +/* + * Copyright 2013 Robert von Burg + * + * 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.model.xml; + +import java.util.Set; + +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.XMLStreamWriter; + +import li.strolch.model.GroupedParameterizedElement; +import li.strolch.model.ParameterBag; +import li.strolch.model.ParameterizedElement; +import li.strolch.model.StrolchElement; +import li.strolch.model.Tags; +import li.strolch.model.parameter.Parameter; +import ch.eitchnet.utils.helper.StringHelper; + +/** + * @author Robert von Burg + */ +public abstract class AbstractToSaxWriterVisitor { + + protected XMLStreamWriter writer; + + public AbstractToSaxWriterVisitor(XMLStreamWriter writer) { + this.writer = writer; + } + + protected void writeElement(String tag, GroupedParameterizedElement element) throws XMLStreamException { + boolean isEmpty = !element.hasParameterBags(); + writeStartStrolchElement(tag, isEmpty, element); + if (!isEmpty) { + writeParameterBags(element); + writer.writeEndElement(); + } + } + + protected void writeStartStrolchElement(String tag, boolean empty, StrolchElement element) + throws XMLStreamException { + if (empty) + writer.writeEmptyElement(tag); + else + writer.writeStartElement(tag); + + writer.writeAttribute(Tags.ID, element.getId()); + if (!StringHelper.isEmpty(element.getName())) + writer.writeAttribute(Tags.NAME, element.getName()); + writer.writeAttribute(Tags.TYPE, element.getType()); + } + + protected void writeParameters(ParameterizedElement element) throws XMLStreamException { + + Set parameterKeySet = element.getParameterKeySet(); + for (String paramKey : parameterKeySet) { + Parameter parameter = element.getParameter(paramKey); + + writeStartStrolchElement(Tags.PARAMETER, true, parameter); + + if (!Parameter.INTERPRETATION_NONE.equals(parameter.getInterpretation())) + writer.writeAttribute(Tags.INTERPRETATION, parameter.getInterpretation()); + if (!Parameter.UOM_NONE.equals(parameter.getUom())) + writer.writeAttribute(Tags.UOM, parameter.getUom()); + if (parameter.isHidden()) + writer.writeAttribute(Tags.HIDDEN, Boolean.toString(parameter.isHidden())); + + writer.writeAttribute(Tags.VALUE, parameter.getValueAsString()); + } + } + + protected void writeParameterBags(GroupedParameterizedElement element) throws XMLStreamException { + + Set bagKeySet = element.getParameterBagKeySet(); + for (String bagKey : bagKeySet) { + ParameterBag parameterBag = element.getParameterBag(bagKey); + boolean isEmpty = !parameterBag.hasParameters(); + writeStartStrolchElement(Tags.PARAMETER_BAG, isEmpty, parameterBag); + if (!isEmpty) { + writeParameters(parameterBag); + writer.writeEndElement(); + } + } + } +} diff --git a/src/main/java/li/strolch/model/xml/OrderToSaxWriterVisitor.java b/src/main/java/li/strolch/model/xml/OrderToSaxWriterVisitor.java new file mode 100644 index 000000000..8ac0200a0 --- /dev/null +++ b/src/main/java/li/strolch/model/xml/OrderToSaxWriterVisitor.java @@ -0,0 +1,47 @@ +/* + * Copyright 2013 Robert von Burg + * + * 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.model.xml; + +import java.text.MessageFormat; + +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.XMLStreamWriter; + +import li.strolch.exception.StrolchException; +import li.strolch.model.Order; +import li.strolch.model.OrderVisitor; +import li.strolch.model.Tags; + +/** + * @author Robert von Burg + */ +public class OrderToSaxWriterVisitor extends AbstractToSaxWriterVisitor implements OrderVisitor { + + public OrderToSaxWriterVisitor(XMLStreamWriter writer) { + super(writer); + } + + @Override + public void visit(Order order) { + try { + writeElement(Tags.ORDER, order); + } catch (XMLStreamException e) { + String msg = "Failed to write Order {0} due to {1}"; + msg = MessageFormat.format(msg, order.getLocator(), e.getMessage()); + throw new StrolchException(msg, e); + } + } +} diff --git a/src/main/java/li/strolch/model/xml/ResourceToSaxWriterVisitor.java b/src/main/java/li/strolch/model/xml/ResourceToSaxWriterVisitor.java new file mode 100644 index 000000000..f98098f29 --- /dev/null +++ b/src/main/java/li/strolch/model/xml/ResourceToSaxWriterVisitor.java @@ -0,0 +1,47 @@ +/* + * Copyright 2013 Robert von Burg + * + * 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.model.xml; + +import java.text.MessageFormat; + +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.XMLStreamWriter; + +import li.strolch.exception.StrolchException; +import li.strolch.model.Resource; +import li.strolch.model.ResourceVisitor; +import li.strolch.model.Tags; + +/** + * @author Robert von Burg + */ +public class ResourceToSaxWriterVisitor extends AbstractToSaxWriterVisitor implements ResourceVisitor { + + public ResourceToSaxWriterVisitor(XMLStreamWriter writer) { + super(writer); + } + + @Override + public void visit(Resource resource) { + try { + writeElement(Tags.RESOURCE, resource); + } catch (XMLStreamException e) { + String msg = "Failed to write Resource {0} due to {1}"; + msg = MessageFormat.format(msg, resource.getLocator(), e.getMessage()); + throw new StrolchException(msg, e); + } + } +} diff --git a/src/main/java/li/strolch/model/xml/XmlModelFileHandler.java b/src/main/java/li/strolch/model/xml/XmlModelSaxFileReader.java similarity index 93% rename from src/main/java/li/strolch/model/xml/XmlModelFileHandler.java rename to src/main/java/li/strolch/model/xml/XmlModelSaxFileReader.java index d75b1261f..81e9c0d47 100644 --- a/src/main/java/li/strolch/model/xml/XmlModelFileHandler.java +++ b/src/main/java/li/strolch/model/xml/XmlModelSaxFileReader.java @@ -36,7 +36,7 @@ import ch.eitchnet.utils.helper.StringHelper; * @author Robert von Burg * */ -public class XmlModelFileHandler extends XmlModelDefaultHandler { +public class XmlModelSaxFileReader extends XmlModelSaxReader { private File modelFile; @@ -44,7 +44,7 @@ public class XmlModelFileHandler extends XmlModelDefaultHandler { * @param listener * @param modelFile */ - public XmlModelFileHandler(StrolchElementListener listener, File modelFile) { + public XmlModelSaxFileReader(StrolchElementListener listener, File modelFile) { super(listener); this.modelFile = modelFile; } @@ -67,7 +67,7 @@ public class XmlModelFileHandler extends XmlModelDefaultHandler { throw new IllegalArgumentException(msg); } - XmlModelFileHandler handler = new XmlModelFileHandler(this.listener, includeFile); + XmlModelSaxFileReader handler = new XmlModelSaxFileReader(this.listener, includeFile); handler.parseFile(); this.statistics.nrOfOrders += handler.statistics.nrOfOrders; this.statistics.nrOfResources += handler.statistics.nrOfResources; diff --git a/src/main/java/li/strolch/model/xml/XmlModelDefaultHandler.java b/src/main/java/li/strolch/model/xml/XmlModelSaxReader.java similarity index 97% rename from src/main/java/li/strolch/model/xml/XmlModelDefaultHandler.java rename to src/main/java/li/strolch/model/xml/XmlModelSaxReader.java index 9b8c72b7f..5b0b424d1 100644 --- a/src/main/java/li/strolch/model/xml/XmlModelDefaultHandler.java +++ b/src/main/java/li/strolch/model/xml/XmlModelSaxReader.java @@ -44,11 +44,10 @@ import ch.eitchnet.utils.iso8601.ISO8601FormatFactory; /** * @author Robert von Burg - * */ -public class XmlModelDefaultHandler extends DefaultHandler { +public class XmlModelSaxReader extends DefaultHandler { - protected static final Logger logger = LoggerFactory.getLogger(XmlModelDefaultHandler.class); + protected static final Logger logger = LoggerFactory.getLogger(XmlModelSaxReader.class); protected StrolchElementListener listener; protected XmlModelStatistics statistics; @@ -56,7 +55,7 @@ public class XmlModelDefaultHandler extends DefaultHandler { private GroupedParameterizedElement parameterizedElement; private ParameterBag pBag; - public XmlModelDefaultHandler(StrolchElementListener listener) { + public XmlModelSaxReader(StrolchElementListener listener) { this.listener = listener; this.statistics = new XmlModelStatistics(); } diff --git a/src/test/java/li/strolch/model/XmlModelDefaultHandlerTest.java b/src/test/java/li/strolch/model/XmlModelDefaultHandlerTest.java index 2a0ecb803..1b7fedbae 100644 --- a/src/test/java/li/strolch/model/XmlModelDefaultHandlerTest.java +++ b/src/test/java/li/strolch/model/XmlModelDefaultHandlerTest.java @@ -22,8 +22,8 @@ import java.util.HashMap; import java.util.Map; import li.strolch.model.xml.StrolchElementListener; -import li.strolch.model.xml.XmlModelDefaultHandler.XmlModelStatistics; -import li.strolch.model.xml.XmlModelFileHandler; +import li.strolch.model.xml.XmlModelSaxReader.XmlModelStatistics; +import li.strolch.model.xml.XmlModelSaxFileReader; import org.junit.Test; import org.slf4j.Logger; @@ -58,7 +58,7 @@ public class XmlModelDefaultHandlerTest { orderMap.put(order.getId(), order); } }; - XmlModelFileHandler handler = new XmlModelFileHandler(listener, file); + XmlModelSaxFileReader handler = new XmlModelSaxFileReader(listener, file); handler.parseFile(); assertEquals(3, resourceMap.size());