[Major] Multiple issues

- setId() and setName() don't allow empty values
- added Locator.newBuilder(String)
- fixed wrong locator created by ParameterizedElement
- Better exception handling when parsing from XML as Sax
This commit is contained in:
Robert von Burg 2014-03-03 23:32:33 +01:00
parent d15d163ebf
commit 0dae330e72
5 changed files with 67 additions and 44 deletions

View File

@ -22,6 +22,8 @@ import li.strolch.model.Locator.LocatorBuilder;
import org.w3c.dom.Element;
import ch.eitchnet.utils.helper.StringHelper;
/**
* @author Robert von Burg <eitch@eitchnet.ch>
*/
@ -70,12 +72,11 @@ public abstract class AbstractStrolchElement implements StrolchElement {
@Override
public void setId(String id) {
if (id == null)
throw new StrolchException("The id may never be null"); //$NON-NLS-1$
if (id.isEmpty())
throw new StrolchException("The id may never be empty"); //$NON-NLS-1$
if (StringHelper.isEmpty(id)) {
String msg = "The id may never be empty for {0}";
msg = MessageFormat.format(msg, getClass().getSimpleName());
throw new StrolchException(msg);
}
this.id = id;
}
@ -86,6 +87,11 @@ public abstract class AbstractStrolchElement implements StrolchElement {
@Override
public void setName(String name) {
if (StringHelper.isEmpty(name)) {
String msg = "The name may never be empty for {0} with id {1}";
msg = MessageFormat.format(msg, getClass().getSimpleName(), id);
throw new StrolchException(msg);
}
this.name = name;
}

View File

@ -243,6 +243,18 @@ public class Locator {
return new Locator(locatorPath);
}
/**
* Creates a new {@link LocatorBuilder} instance and appends the given root element tag to it
*
* @param rootElement
* the first element on the {@link Locator}
*
* @return a new {@link LocatorBuilder} instance with the given root element tag as the first element
*/
public static LocatorBuilder newBuilder(String rootElement) {
return new LocatorBuilder().append(rootElement);
}
/**
* {@link LocatorBuilder} is used to build {@link Locator}s where a deep hierarchy is to be created. The
* {@link #append(String)} method returns itself for chain building

View File

@ -189,7 +189,6 @@ public abstract class ParameterizedElement extends AbstractStrolchElement {
@Override
public Locator getLocator() {
LocatorBuilder lb = new LocatorBuilder();
this.parent.fillLocator(lb);
fillLocator(lb);
return lb.build();
}

View File

@ -22,7 +22,6 @@ import li.strolch.model.ResourceVisitor;
import li.strolch.model.Tags;
import org.xml.sax.ContentHandler;
import org.xml.sax.SAXException;
/**
* @author Robert von Burg <eitch@eitchnet.ch>
@ -41,7 +40,7 @@ public class ResourceToSaxVisitor extends StrolchElementToDomVisitor implements
toSax(res);
this.contentHandler.endElement(null, null, Tags.RESOURCE);
} catch (SAXException e) {
} catch (Exception e) {
String msg = "Failed to transform Resource {0} to XML due to {1}"; //$NON-NLS-1$
msg = MessageFormat.format(msg, res.getLocator(), e.getMessage());
throw new RuntimeException(msg, e);

View File

@ -20,6 +20,7 @@ import static ch.eitchnet.utils.helper.StringHelper.NULL;
import java.text.MessageFormat;
import java.util.Date;
import li.strolch.exception.StrolchException;
import li.strolch.model.GroupedParameterizedElement;
import li.strolch.model.Order;
import li.strolch.model.ParameterBag;
@ -122,42 +123,48 @@ public class XmlModelSaxReader extends DefaultHandler {
String paramValue = attributes.getValue(Tags.VALUE);
String paramHiddenS = attributes.getValue(Tags.HIDDEN);
String paramIndexS = attributes.getValue(Tags.INDEX);
int index = StringHelper.isEmpty(paramIndexS) ? 0 : Integer.valueOf(paramIndexS);
boolean paramHidden = StringHelper.isEmpty(paramHiddenS) ? false : StringHelper.parseBoolean(paramHiddenS);
String paramUom = attributes.getValue(Tags.UOM);
String paramInterpretation = attributes.getValue(Tags.INTERPRETATION);
Parameter<?> param;
switch (paramType) {
case StringParameter.TYPE:
param = new StringParameter(paramId, paramName, paramValue);
break;
case IntegerParameter.TYPE:
param = new IntegerParameter(paramId, paramName, IntegerParameter.parseFromString(paramValue));
break;
case BooleanParameter.TYPE:
param = new BooleanParameter(paramId, paramName, BooleanParameter.parseFromString(paramValue));
break;
case LongParameter.TYPE:
param = new LongParameter(paramId, paramName, LongParameter.parseFromString(paramValue));
break;
case DateParameter.TYPE:
param = new DateParameter(paramId, paramName, DateParameter.parseFromString(paramValue));
break;
case StringListParameter.TYPE:
param = new StringListParameter(paramId, paramName, StringListParameter.parseFromString(paramValue));
break;
case FloatParameter.TYPE:
param = new FloatParameter(paramId, paramName, FloatParameter.parseFromString(paramValue));
break;
default:
throw new UnsupportedOperationException(MessageFormat.format(
"Parameters of type {0} are not supported!", paramType)); //$NON-NLS-1$
try {
int index = StringHelper.isEmpty(paramIndexS) ? 0 : Integer.valueOf(paramIndexS);
boolean paramHidden = StringHelper.isEmpty(paramHiddenS) ? false : StringHelper
.parseBoolean(paramHiddenS);
String paramUom = attributes.getValue(Tags.UOM);
String paramInterpretation = attributes.getValue(Tags.INTERPRETATION);
Parameter<?> param;
switch (paramType) {
case StringParameter.TYPE:
param = new StringParameter(paramId, paramName, paramValue);
break;
case IntegerParameter.TYPE:
param = new IntegerParameter(paramId, paramName, IntegerParameter.parseFromString(paramValue));
break;
case BooleanParameter.TYPE:
param = new BooleanParameter(paramId, paramName, BooleanParameter.parseFromString(paramValue));
break;
case LongParameter.TYPE:
param = new LongParameter(paramId, paramName, LongParameter.parseFromString(paramValue));
break;
case DateParameter.TYPE:
param = new DateParameter(paramId, paramName, DateParameter.parseFromString(paramValue));
break;
case StringListParameter.TYPE:
param = new StringListParameter(paramId, paramName, StringListParameter.parseFromString(paramValue));
break;
case FloatParameter.TYPE:
param = new FloatParameter(paramId, paramName, FloatParameter.parseFromString(paramValue));
break;
default:
throw new UnsupportedOperationException(MessageFormat.format(
"Parameters of type {0} are not supported!", paramType)); //$NON-NLS-1$
}
param.setHidden(paramHidden);
param.setUom(paramUom);
param.setInterpretation(paramInterpretation);
param.setIndex(index);
this.pBag.addParameter(param);
} catch (Exception e) {
throw new StrolchException("Failed to instantiate parameter " + paramId + " for bag "
+ this.pBag.getLocator() + " due to " + e.getMessage(), e);
}
param.setHidden(paramHidden);
param.setUom(paramUom);
param.setInterpretation(paramInterpretation);
param.setIndex(index);
this.pBag.addParameter(param);
break;
default: