[Major] refactored StrolchElementVisitor to return value

Now instead of having visitors implement their own getters, the return
type is defined as a template on the concrete implementation.

To return nothing simply use the type Void and return null.
This commit is contained in:
Robert von Burg 2014-08-06 12:46:31 +02:00
parent 64afcb02a6
commit 1ceedfc818
11 changed files with 42 additions and 22 deletions

View File

@ -20,8 +20,8 @@ import li.strolch.model.visitor.StrolchElementVisitor;
/** /**
* @author Robert von Burg <eitch@eitchnet.ch> * @author Robert von Burg <eitch@eitchnet.ch>
*/ */
public interface OrderVisitor extends StrolchElementVisitor<Order> { public interface OrderVisitor<U> extends StrolchElementVisitor<Order, U> {
@Override @Override
public void visit(Order element); public U visit(Order element);
} }

View File

@ -19,9 +19,10 @@ import li.strolch.model.visitor.StrolchElementVisitor;
/** /**
* @author Robert von Burg <eitch@eitchnet.ch> * @author Robert von Burg <eitch@eitchnet.ch>
* @param <U>
*/ */
public interface ResourceVisitor extends StrolchElementVisitor<Resource> { public interface ResourceVisitor<U> extends StrolchElementVisitor<Resource, U> {
@Override @Override
public void visit(Resource element); public U visit(Resource element);
} }

View File

@ -15,13 +15,16 @@
*/ */
package li.strolch.model.visitor; package li.strolch.model.visitor;
import java.util.List;
import li.strolch.model.Locator;
import li.strolch.model.Order; import li.strolch.model.Order;
import li.strolch.model.OrderVisitor; import li.strolch.model.OrderVisitor;
/** /**
* @author Robert von Burg <eitch@eitchnet.ch> * @author Robert von Burg <eitch@eitchnet.ch>
*/ */
public class OrderDeepEqualsVisitor extends StrolchElementDeepEqualsVisitor implements OrderVisitor { public class OrderDeepEqualsVisitor extends StrolchElementDeepEqualsVisitor implements OrderVisitor<List<Locator>> {
private Order srcOrder; private Order srcOrder;
@ -30,7 +33,8 @@ public class OrderDeepEqualsVisitor extends StrolchElementDeepEqualsVisitor impl
} }
@Override @Override
public void visit(Order dstOrder) { public List<Locator> visit(Order dstOrder) {
deepEquals(this.srcOrder, dstOrder); deepEquals(this.srcOrder, dstOrder);
return getMismatchedLocators();
} }
} }

View File

@ -15,13 +15,17 @@
*/ */
package li.strolch.model.visitor; package li.strolch.model.visitor;
import java.util.List;
import li.strolch.model.Locator;
import li.strolch.model.Resource; import li.strolch.model.Resource;
import li.strolch.model.ResourceVisitor; import li.strolch.model.ResourceVisitor;
/** /**
* @author Robert von Burg <eitch@eitchnet.ch> * @author Robert von Burg <eitch@eitchnet.ch>
*/ */
public class ResourceDeepEqualsVisitor extends StrolchElementDeepEqualsVisitor implements ResourceVisitor { public class ResourceDeepEqualsVisitor extends StrolchElementDeepEqualsVisitor implements
ResourceVisitor<List<Locator>> {
private Resource srcRes; private Resource srcRes;
@ -30,7 +34,8 @@ public class ResourceDeepEqualsVisitor extends StrolchElementDeepEqualsVisitor i
} }
@Override @Override
public void visit(Resource dstRes) { public List<Locator> visit(Resource dstRes) {
deepEquals(this.srcRes, dstRes); deepEquals(this.srcRes, dstRes);
return getMismatchedLocators();
} }
} }

View File

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

View File

@ -28,7 +28,7 @@ import ch.eitchnet.utils.helper.DomUtil;
/** /**
* @author Robert von Burg <eitch@eitchnet.ch> * @author Robert von Burg <eitch@eitchnet.ch>
*/ */
public class OrderToDomVisitor implements OrderVisitor { public class OrderToDomVisitor implements OrderVisitor<Document> {
private Document document; private Document document;
@ -40,12 +40,13 @@ public class OrderToDomVisitor implements OrderVisitor {
} }
@Override @Override
public void visit(Order order) { public Document visit(Order order) {
DocumentBuilder documentBuilder = DomUtil.createDocumentBuilder(); DocumentBuilder documentBuilder = DomUtil.createDocumentBuilder();
Document document = documentBuilder.getDOMImplementation().createDocument(null, null, null); Document document = documentBuilder.getDOMImplementation().createDocument(null, null, null);
Element orderDom = order.toDom(document); Element orderDom = order.toDom(document);
document.appendChild(orderDom); document.appendChild(orderDom);
this.document = document; this.document = document;
return this.document;
} }
} }

View File

@ -27,14 +27,14 @@ import org.xml.sax.SAXException;
/** /**
* @author Robert von Burg <eitch@eitchnet.ch> * @author Robert von Burg <eitch@eitchnet.ch>
*/ */
public class OrderToSaxVisitor extends StrolchElementToDomVisitor implements OrderVisitor { public class OrderToSaxVisitor extends StrolchElementToDomVisitor implements OrderVisitor<Void> {
public OrderToSaxVisitor(ContentHandler contentHandler) { public OrderToSaxVisitor(ContentHandler contentHandler) {
super(contentHandler); super(contentHandler);
} }
@Override @Override
public void visit(Order order) { public Void visit(Order order) {
try { try {
this.contentHandler.startElement(null, null, Tags.ORDER, attributesFor(order)); this.contentHandler.startElement(null, null, Tags.ORDER, attributesFor(order));
@ -46,5 +46,7 @@ public class OrderToSaxVisitor extends StrolchElementToDomVisitor implements Ord
msg = MessageFormat.format(msg, order.getLocator(), e.getMessage()); msg = MessageFormat.format(msg, order.getLocator(), e.getMessage());
throw new RuntimeException(msg, e); throw new RuntimeException(msg, e);
} }
return null;
} }
} }

View File

@ -28,14 +28,14 @@ import li.strolch.model.Tags;
/** /**
* @author Robert von Burg <eitch@eitchnet.ch> * @author Robert von Burg <eitch@eitchnet.ch>
*/ */
public class OrderToSaxWriterVisitor extends AbstractToSaxWriterVisitor implements OrderVisitor { public class OrderToSaxWriterVisitor extends AbstractToSaxWriterVisitor implements OrderVisitor<Void> {
public OrderToSaxWriterVisitor(XMLStreamWriter writer) { public OrderToSaxWriterVisitor(XMLStreamWriter writer) {
super(writer); super(writer);
} }
@Override @Override
public void visit(Order order) { public Void visit(Order order) {
try { try {
writeElement(Tags.ORDER, order); writeElement(Tags.ORDER, order);
this.writer.flush(); this.writer.flush();
@ -44,5 +44,7 @@ public class OrderToSaxWriterVisitor extends AbstractToSaxWriterVisitor implemen
msg = MessageFormat.format(msg, order.getLocator(), e.getMessage()); msg = MessageFormat.format(msg, order.getLocator(), e.getMessage());
throw new StrolchException(msg, e); throw new StrolchException(msg, e);
} }
return null;
} }
} }

View File

@ -28,7 +28,7 @@ import ch.eitchnet.utils.helper.DomUtil;
/** /**
* @author Robert von Burg <eitch@eitchnet.ch> * @author Robert von Burg <eitch@eitchnet.ch>
*/ */
public class ResourceToDomVisitor implements ResourceVisitor { public class ResourceToDomVisitor implements ResourceVisitor<Document> {
private Document document; private Document document;
@ -40,12 +40,13 @@ public class ResourceToDomVisitor implements ResourceVisitor {
} }
@Override @Override
public void visit(Resource resource) { public Document visit(Resource resource) {
DocumentBuilder documentBuilder = DomUtil.createDocumentBuilder(); DocumentBuilder documentBuilder = DomUtil.createDocumentBuilder();
Document document = documentBuilder.getDOMImplementation().createDocument(null, null, null); Document document = documentBuilder.getDOMImplementation().createDocument(null, null, null);
Element resourceDom = resource.toDom(document); Element resourceDom = resource.toDom(document);
document.appendChild(resourceDom); document.appendChild(resourceDom);
this.document = document; this.document = document;
return this.document;
} }
} }

View File

@ -26,14 +26,14 @@ import org.xml.sax.ContentHandler;
/** /**
* @author Robert von Burg <eitch@eitchnet.ch> * @author Robert von Burg <eitch@eitchnet.ch>
*/ */
public class ResourceToSaxVisitor extends StrolchElementToDomVisitor implements ResourceVisitor { public class ResourceToSaxVisitor extends StrolchElementToDomVisitor implements ResourceVisitor<Void> {
public ResourceToSaxVisitor(ContentHandler contentHandler) { public ResourceToSaxVisitor(ContentHandler contentHandler) {
super(contentHandler); super(contentHandler);
} }
@Override @Override
public void visit(Resource res) { public Void visit(Resource res) {
try { try {
this.contentHandler.startElement(null, null, Tags.RESOURCE, attributesFor(res)); this.contentHandler.startElement(null, null, Tags.RESOURCE, attributesFor(res));
@ -45,5 +45,7 @@ public class ResourceToSaxVisitor extends StrolchElementToDomVisitor implements
msg = MessageFormat.format(msg, res.getLocator(), e.getMessage()); msg = MessageFormat.format(msg, res.getLocator(), e.getMessage());
throw new RuntimeException(msg, e); throw new RuntimeException(msg, e);
} }
return null;
} }
} }

View File

@ -28,14 +28,14 @@ import li.strolch.model.Tags;
/** /**
* @author Robert von Burg <eitch@eitchnet.ch> * @author Robert von Burg <eitch@eitchnet.ch>
*/ */
public class ResourceToSaxWriterVisitor extends AbstractToSaxWriterVisitor implements ResourceVisitor { public class ResourceToSaxWriterVisitor extends AbstractToSaxWriterVisitor implements ResourceVisitor<Void> {
public ResourceToSaxWriterVisitor(XMLStreamWriter writer) { public ResourceToSaxWriterVisitor(XMLStreamWriter writer) {
super(writer); super(writer);
} }
@Override @Override
public void visit(Resource resource) { public Void visit(Resource resource) {
try { try {
writeElement(Tags.RESOURCE, resource); writeElement(Tags.RESOURCE, resource);
this.writer.flush(); this.writer.flush();
@ -44,5 +44,7 @@ public class ResourceToSaxWriterVisitor extends AbstractToSaxWriterVisitor imple
msg = MessageFormat.format(msg, resource.getLocator(), e.getMessage()); msg = MessageFormat.format(msg, resource.getLocator(), e.getMessage());
throw new StrolchException(msg, e); throw new StrolchException(msg, e);
} }
return null;
} }
} }