[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>
*/
public interface OrderVisitor extends StrolchElementVisitor<Order> {
public interface OrderVisitor<U> extends StrolchElementVisitor<Order, U> {
@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>
* @param <U>
*/
public interface ResourceVisitor extends StrolchElementVisitor<Resource> {
public interface ResourceVisitor<U> extends StrolchElementVisitor<Resource, U> {
@Override
public void visit(Resource element);
public U visit(Resource element);
}

View File

@ -15,13 +15,16 @@
*/
package li.strolch.model.visitor;
import java.util.List;
import li.strolch.model.Locator;
import li.strolch.model.Order;
import li.strolch.model.OrderVisitor;
/**
* @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;
@ -30,7 +33,8 @@ public class OrderDeepEqualsVisitor extends StrolchElementDeepEqualsVisitor impl
}
@Override
public void visit(Order dstOrder) {
public List<Locator> visit(Order dstOrder) {
deepEquals(this.srcOrder, dstOrder);
return getMismatchedLocators();
}
}

View File

@ -15,13 +15,17 @@
*/
package li.strolch.model.visitor;
import java.util.List;
import li.strolch.model.Locator;
import li.strolch.model.Resource;
import li.strolch.model.ResourceVisitor;
/**
* @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;
@ -30,7 +34,8 @@ public class ResourceDeepEqualsVisitor extends StrolchElementDeepEqualsVisitor i
}
@Override
public void visit(Resource dstRes) {
public List<Locator> visit(Resource 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>
*/
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>
*/
public class OrderToDomVisitor implements OrderVisitor {
public class OrderToDomVisitor implements OrderVisitor<Document> {
private Document document;
@ -40,12 +40,13 @@ public class OrderToDomVisitor implements OrderVisitor {
}
@Override
public void visit(Order order) {
public Document visit(Order order) {
DocumentBuilder documentBuilder = DomUtil.createDocumentBuilder();
Document document = documentBuilder.getDOMImplementation().createDocument(null, null, null);
Element orderDom = order.toDom(document);
document.appendChild(orderDom);
this.document = document;
return this.document;
}
}

View File

@ -27,14 +27,14 @@ import org.xml.sax.SAXException;
/**
* @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) {
super(contentHandler);
}
@Override
public void visit(Order order) {
public Void visit(Order order) {
try {
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());
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>
*/
public class OrderToSaxWriterVisitor extends AbstractToSaxWriterVisitor implements OrderVisitor {
public class OrderToSaxWriterVisitor extends AbstractToSaxWriterVisitor implements OrderVisitor<Void> {
public OrderToSaxWriterVisitor(XMLStreamWriter writer) {
super(writer);
}
@Override
public void visit(Order order) {
public Void visit(Order order) {
try {
writeElement(Tags.ORDER, order);
this.writer.flush();
@ -44,5 +44,7 @@ public class OrderToSaxWriterVisitor extends AbstractToSaxWriterVisitor implemen
msg = MessageFormat.format(msg, order.getLocator(), e.getMessage());
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>
*/
public class ResourceToDomVisitor implements ResourceVisitor {
public class ResourceToDomVisitor implements ResourceVisitor<Document> {
private Document document;
@ -40,12 +40,13 @@ public class ResourceToDomVisitor implements ResourceVisitor {
}
@Override
public void visit(Resource resource) {
public Document visit(Resource resource) {
DocumentBuilder documentBuilder = DomUtil.createDocumentBuilder();
Document document = documentBuilder.getDOMImplementation().createDocument(null, null, null);
Element resourceDom = resource.toDom(document);
document.appendChild(resourceDom);
this.document = document;
return this.document;
}
}

View File

@ -26,14 +26,14 @@ import org.xml.sax.ContentHandler;
/**
* @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) {
super(contentHandler);
}
@Override
public void visit(Resource res) {
public Void visit(Resource res) {
try {
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());
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>
*/
public class ResourceToSaxWriterVisitor extends AbstractToSaxWriterVisitor implements ResourceVisitor {
public class ResourceToSaxWriterVisitor extends AbstractToSaxWriterVisitor implements ResourceVisitor<Void> {
public ResourceToSaxWriterVisitor(XMLStreamWriter writer) {
super(writer);
}
@Override
public void visit(Resource resource) {
public Void visit(Resource resource) {
try {
writeElement(Tags.RESOURCE, resource);
this.writer.flush();
@ -44,5 +44,7 @@ public class ResourceToSaxWriterVisitor extends AbstractToSaxWriterVisitor imple
msg = MessageFormat.format(msg, resource.getLocator(), e.getMessage());
throw new StrolchException(msg, e);
}
return null;
}
}