diff --git a/src/main/java/li/strolch/model/Order.java b/src/main/java/li/strolch/model/Order.java index 51026960a..38bf665db 100644 --- a/src/main/java/li/strolch/model/Order.java +++ b/src/main/java/li/strolch/model/Order.java @@ -18,6 +18,7 @@ package li.strolch.model; import java.util.Date; import li.strolch.model.Locator.LocatorBuilder; +import li.strolch.model.visitor.StrolchRootElementVisitor; import org.w3c.dom.Document; import org.w3c.dom.Element; @@ -169,6 +170,21 @@ public class Order extends GroupedParameterizedElement implements StrolchRootEle return lb.build(); } + @Override + public StrolchElement getParent() { + return null; + } + + @Override + public Order getRootElement() { + return this; + } + + @Override + public T accept(StrolchRootElementVisitor visitor) { + return visitor.visitOrder(this); + } + @SuppressWarnings("nls") @Override public String toString() { diff --git a/src/main/java/li/strolch/model/ParameterizedElement.java b/src/main/java/li/strolch/model/ParameterizedElement.java index ac8acde17..5f1d6e72e 100644 --- a/src/main/java/li/strolch/model/ParameterizedElement.java +++ b/src/main/java/li/strolch/model/ParameterizedElement.java @@ -92,25 +92,6 @@ public abstract class ParameterizedElement extends AbstractStrolchElement { this.type = type; } - /** - * Returns this {@link ParameterizedElement}'s parent - * - * @return the parent - */ - public GroupedParameterizedElement getParent() { - return this.parent; - } - - /** - * Set the parent for this {@link ParameterizedElement} - * - * @param parent - * the parent to set - */ - public void setParent(GroupedParameterizedElement parent) { - this.parent = parent; - } - /** * Returns the {@link Parameter} with the given id, or null if it does not exist * @@ -278,6 +259,26 @@ public abstract class ParameterizedElement extends AbstractStrolchElement { } } + @Override + public GroupedParameterizedElement getParent() { + return this.parent; + } + + /** + * Set the parent for this {@link ParameterizedElement} + * + * @param parent + * the parent to set + */ + public void setParent(GroupedParameterizedElement parent) { + this.parent = parent; + } + + @Override + public StrolchRootElement getRootElement() { + return this.parent.getRootElement(); + } + @SuppressWarnings("nls") @Override public String toString() { diff --git a/src/main/java/li/strolch/model/Resource.java b/src/main/java/li/strolch/model/Resource.java index f33964b49..11fe1cb57 100644 --- a/src/main/java/li/strolch/model/Resource.java +++ b/src/main/java/li/strolch/model/Resource.java @@ -16,6 +16,7 @@ package li.strolch.model; import li.strolch.model.Locator.LocatorBuilder; +import li.strolch.model.visitor.StrolchRootElementVisitor; import org.w3c.dom.Document; import org.w3c.dom.Element; @@ -84,6 +85,21 @@ public class Resource extends GroupedParameterizedElement implements StrolchRoot return lb.build(); } + @Override + public StrolchElement getParent() { + return null; + } + + @Override + public Resource getRootElement() { + return this; + } + + @Override + public T accept(StrolchRootElementVisitor visitor) { + return visitor.visitResource(this); + } + @SuppressWarnings("nls") @Override public String toString() { diff --git a/src/main/java/li/strolch/model/StrolchElement.java b/src/main/java/li/strolch/model/StrolchElement.java index 261e7b4bd..e556f42e2 100644 --- a/src/main/java/li/strolch/model/StrolchElement.java +++ b/src/main/java/li/strolch/model/StrolchElement.java @@ -94,6 +94,10 @@ public interface StrolchElement extends Serializable, Comparable */ public String getType(); + public StrolchElement getParent(); + + public StrolchRootElement getRootElement(); + /** * Return a clone of this {@link StrolchElement} * diff --git a/src/main/java/li/strolch/model/StrolchRootElement.java b/src/main/java/li/strolch/model/StrolchRootElement.java index 37699c783..265cd185d 100644 --- a/src/main/java/li/strolch/model/StrolchRootElement.java +++ b/src/main/java/li/strolch/model/StrolchRootElement.java @@ -15,6 +15,8 @@ */ package li.strolch.model; +import li.strolch.model.visitor.StrolchRootElementVisitor; + /** * Root element for all top level {@link StrolchElement}. These are elements which have no parent, e.g. {@link Resource * Resources} and {@link Order Orders} @@ -23,5 +25,5 @@ package li.strolch.model; */ public interface StrolchRootElement extends StrolchElement { - // marker interface + public T accept(StrolchRootElementVisitor visitor); } diff --git a/src/main/java/li/strolch/model/parameter/AbstractParameter.java b/src/main/java/li/strolch/model/parameter/AbstractParameter.java index bec460d3c..7bcd7b324 100644 --- a/src/main/java/li/strolch/model/parameter/AbstractParameter.java +++ b/src/main/java/li/strolch/model/parameter/AbstractParameter.java @@ -21,9 +21,10 @@ import li.strolch.exception.StrolchException; import li.strolch.model.AbstractStrolchElement; import li.strolch.model.Locator; import li.strolch.model.Locator.LocatorBuilder; -import li.strolch.model.visitor.ParameterVisitor; import li.strolch.model.ParameterizedElement; +import li.strolch.model.StrolchRootElement; import li.strolch.model.Tags; +import li.strolch.model.visitor.ParameterVisitor; import org.w3c.dom.Document; import org.w3c.dom.Element; @@ -121,6 +122,11 @@ public abstract class AbstractParameter extends AbstractStrolchElement implem this.parent = parent; } + @Override + public StrolchRootElement getRootElement() { + return this.parent.getRootElement(); + } + @Override public Element toDom(Document doc) { Element element = doc.createElement(Tags.PARAMETER); diff --git a/src/main/java/li/strolch/model/visitor/StrolchElementVisitor.java b/src/main/java/li/strolch/model/visitor/StrolchElementVisitor.java index 93a9c5014..9034a0c77 100644 --- a/src/main/java/li/strolch/model/visitor/StrolchElementVisitor.java +++ b/src/main/java/li/strolch/model/visitor/StrolchElementVisitor.java @@ -20,7 +20,7 @@ import li.strolch.model.StrolchElement; /** * @author Robert von Burg */ -public interface StrolchElementVisitor { +public interface StrolchElementVisitor extends StrolchVisitor { public void visit(T element); } diff --git a/src/main/java/li/strolch/model/visitor/StrolchRootElementVisitor.java b/src/main/java/li/strolch/model/visitor/StrolchRootElementVisitor.java new file mode 100644 index 000000000..c75f5a107 --- /dev/null +++ b/src/main/java/li/strolch/model/visitor/StrolchRootElementVisitor.java @@ -0,0 +1,29 @@ +/* + * 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.visitor; + +import li.strolch.model.Order; +import li.strolch.model.Resource; + +/** + * @author Robert von Burg + */ +public interface StrolchRootElementVisitor extends StrolchVisitor { + + public T visitOrder(Order order); + + public T visitResource(Resource resource); +} diff --git a/src/main/java/li/strolch/model/visitor/StrolchVisitor.java b/src/main/java/li/strolch/model/visitor/StrolchVisitor.java new file mode 100644 index 000000000..aa58cfca9 --- /dev/null +++ b/src/main/java/li/strolch/model/visitor/StrolchVisitor.java @@ -0,0 +1,26 @@ +/* + * 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.visitor; + +/** + * Marker interface to allow to quickly see the visitor implementations in Strolch + * + * @author Robert von Burg + */ +public interface StrolchVisitor { + + // marker interface +}