[New] Added New StrolchElementVisitor for StrolchRootElement

Also added getParent() and getRootElement() on StrolchElement
This commit is contained in:
Robert von Burg 2014-02-26 20:37:42 +01:00
parent 7147bc1570
commit d15d163ebf
9 changed files with 122 additions and 22 deletions

View File

@ -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> T accept(StrolchRootElementVisitor visitor) {
return visitor.visitOrder(this);
}
@SuppressWarnings("nls")
@Override
public String toString() {

View File

@ -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() {

View File

@ -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> T accept(StrolchRootElementVisitor visitor) {
return visitor.visitResource(this);
}
@SuppressWarnings("nls")
@Override
public String toString() {

View File

@ -94,6 +94,10 @@ public interface StrolchElement extends Serializable, Comparable<StrolchElement>
*/
public String getType();
public StrolchElement getParent();
public StrolchRootElement getRootElement();
/**
* Return a clone of this {@link StrolchElement}
*

View File

@ -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> T accept(StrolchRootElementVisitor visitor);
}

View File

@ -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<T> 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);

View File

@ -20,7 +20,7 @@ import li.strolch.model.StrolchElement;
/**
* @author Robert von Burg <eitch@eitchnet.ch>
*/
public interface StrolchElementVisitor<T extends StrolchElement> {
public interface StrolchElementVisitor<T extends StrolchElement> extends StrolchVisitor {
public void visit(T element);
}

View File

@ -0,0 +1,29 @@
/*
* 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.model.visitor;
import li.strolch.model.Order;
import li.strolch.model.Resource;
/**
* @author Robert von Burg <eitch@eitchnet.ch>
*/
public interface StrolchRootElementVisitor extends StrolchVisitor {
public <T> T visitOrder(Order order);
public <T> T visitResource(Resource resource);
}

View File

@ -0,0 +1,26 @@
/*
* 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.model.visitor;
/**
* Marker interface to allow to quickly see the visitor implementations in Strolch
*
* @author Robert von Burg <eitch@eitchnet.ch>
*/
public interface StrolchVisitor {
// marker interface
}