package org.objectstyle.wolips.eomodeler.core.model; import java.util.HashSet; import java.util.Set; import org.objectstyle.wolips.eomodeler.core.Messages; public class EOArgument extends AbstractEOArgument<EOStoredProcedure> { public static final String DIRECTION = "direction"; private EOStoredProcedure myStoredProcedure; private EOArgumentDirection myDirection; public EOArgument() { myDirection = EOArgumentDirection.VOID; } public EOArgument(String _name) { super(_name); myDirection = EOArgumentDirection.VOID; } public EOArgument(String _name, String _definition) { super(_name, _definition); myDirection = EOArgumentDirection.VOID; } // public int hashCode() { // return ((myStoredProcedure == null) ? 1 : myStoredProcedure.hashCode()) * super.hashCode(); // } // // public boolean equals(Object _obj) { // boolean equals = false; // if (_obj instanceof EOArgument) { // EOArgument argument = (EOArgument) _obj; // equals = (argument == this) || (ComparisonUtils.equals(argument.myStoredProcedure, myStoredProcedure) && ComparisonUtils.equals(argument.getName(), getName())); // } // return equals; // } public EOStoredProcedure getStoredProcedure() { return myStoredProcedure; } public void _setStoredProcedure(EOStoredProcedure _storedProcedure) { myStoredProcedure = _storedProcedure; } protected AbstractEOArgument _createArgument(String _name) { return new EOArgument(_name); } protected void _propertyChanged(String _propertyName, Object _oldValue, Object _newValue) { if (myStoredProcedure != null) { myStoredProcedure._argumentChanged(this, _propertyName, _oldValue, _newValue); } } public void setName(String _name, boolean _fireEvents) throws DuplicateNameException { if (_name == null) { throw new NullPointerException(Messages.getString("EOArgument.noBlankArgumentNames")); } if (myStoredProcedure != null) { myStoredProcedure._checkForDuplicateArgumentName(this, _name, null); } super.setName(_name, _fireEvents); } public void setDirection(EOArgumentDirection _direction) { EOArgumentDirection oldDirection = myDirection; myDirection = _direction; firePropertyChange(EOArgument.DIRECTION, oldDirection, myDirection); } public EOArgumentDirection getDirection() { return myDirection; } public void loadFromMap(EOModelMap _argumentMap, Set<EOModelVerificationFailure> _failures) { super.loadFromMap(_argumentMap, _failures); Integer argumentDirectionNum = _argumentMap.getInteger("parameterDirection"); if (argumentDirectionNum == null) { argumentDirectionNum = Integer.valueOf(0); } myDirection = EOArgumentDirection.getArgumentDirectionByID(argumentDirectionNum.intValue()); } public EOModelMap toMap() { EOModelMap argumentMap = super.toMap(); if (myDirection == null || myDirection == EOArgumentDirection.VOID) { argumentMap.remove("parameterDirection"); } else { argumentMap.setInteger("parameterDirection", Integer.valueOf(myDirection.getID())); } return argumentMap; } public Set<EOModelReferenceFailure> getReferenceFailures() { return new HashSet<EOModelReferenceFailure>(); } @SuppressWarnings("unused") public void resolve(Set<EOModelVerificationFailure> _failures) { // DO NOTHING } public void verify(Set<EOModelVerificationFailure> _failures) { String name = getName(); if (name == null || name.trim().length() == 0) { _failures.add(new EOModelVerificationFailure(myStoredProcedure.getModel(), this, "The argument " + getName() + " has an empty name.", false)); } else { if (name.indexOf(' ') != -1) { _failures.add(new EOModelVerificationFailure(myStoredProcedure.getModel(), this, "The argument " + getName() + "'s name has a space in it.", false)); } } // if (!isFlattened()) { // String columnName = getColumnName(); // if (columnName == null || columnName.trim().length() == 0) { // _failures.add(new // EOModelVerificationFailure(myStoredProcedure.getModel().getName() + // "/" + myStoredProcedure.getName() + "/" + name + " does not have a // column name set.")); // } // else if (columnName.indexOf(' ') != -1) { // _failures.add(new // EOModelVerificationFailure(myStoredProcedure.getModel().getName() + // "/" + myStoredProcedure.getName() + "/" + name + "'s column name '" + // columnName + "' has a space in it.")); // } // } if (myDirection == null) { _failures.add(new EOModelVerificationFailure(myStoredProcedure.getModel(), this, "The argument " + getName() + " has no direction specified.", false)); } } public String getFullyQualifiedName() { return ((myStoredProcedure == null) ? "?" : myStoredProcedure.getFullyQualifiedName()) + "/arg: " + getName(); } @Override public EOArgument _cloneModelObject() { EOArgument argument = (EOArgument) _cloneArgument(); argument.myDirection = myDirection; return argument; } @Override public Class<EOStoredProcedure> _getModelParentType() { return EOStoredProcedure.class; } public EOStoredProcedure _getModelParent() { return getStoredProcedure(); } public void _removeFromModelParent(Set<EOModelVerificationFailure> failures) { getStoredProcedure().removeArgument(this); } public void _addToModelParent(EOStoredProcedure modelParent, boolean findUniqueName, Set<EOModelVerificationFailure> failures) throws EOModelException { if (findUniqueName) { setName(modelParent.findUnusedArgumentName(getName())); } modelParent.addArgument(this); } public String toString() { return "[EOArgument: name = " + getName() + "]"; } }