/*
* Copyright 2001-2008 Geert Bevin <gbevin[remove] at uwyn dot com>
* Licensed under the Apache License, Version 2.0 (the "License")
* $Id: DataLink.java 3918 2008-04-14 17:35:35Z gbevin $
*/
package com.uwyn.rife.engine;
class DataLink
{
private String mOutput = null;
private ElementInfo mTarget = null;
private boolean mSnapback = false;
private String mInput = null;
private FlowLink mFlowLink = null;
DataLink(String output, ElementInfo target, boolean snapback, String input, FlowLink flowlink)
{
assert output != null;
assert output.length() > 0;
assert target != null || snapback;
assert null == target || !snapback;
assert input != null;
assert input.length() > 0;
mOutput = output;
mTarget = target;
mSnapback = snapback;
mInput = input;
mFlowLink = flowlink;
}
String getOutput()
{
return mOutput;
}
ElementInfo getTarget()
{
return mTarget;
}
boolean isSnapback()
{
return mSnapback;
}
String getInput()
{
return mInput;
}
FlowLink getFlowLink()
{
return mFlowLink;
}
public int hashCode()
{
int target = 1;
int snapback = 1;
int flowlink = 1;
if (mTarget != null)
{
target = mTarget.hashCode();
}
if (mSnapback)
{
snapback = 2;
}
if (mFlowLink != null)
{
flowlink = mFlowLink.hashCode();
}
return mOutput.hashCode()*target*snapback*mInput.hashCode()*flowlink;
}
public boolean equals(Object other)
{
if (this == other)
{
return true;
}
if (null == other)
{
return false;
}
if (!(other instanceof DataLink))
{
return false;
}
DataLink other_datalink = (DataLink)other;
if (!other_datalink.getOutput().equals(getOutput()))
{
return false;
}
if (other_datalink.getTarget() != null || getTarget() != null)
{
if (null == other_datalink.getTarget() && getTarget() != null)
{
return false;
}
if (other_datalink.getTarget() != null && null == getTarget())
{
return false;
}
if (!other_datalink.getTarget().equals(getTarget()))
{
return false;
}
}
if (other_datalink.isSnapback() != isSnapback())
{
return false;
}
if (!other_datalink.getInput().equals(getInput()))
{
return false;
}
if (other_datalink.getFlowLink() != null || getFlowLink() != null)
{
if (null == other_datalink.getFlowLink() && getFlowLink() != null)
{
return false;
}
if (other_datalink.getFlowLink() != null && null == getFlowLink())
{
return false;
}
if (!other_datalink.getFlowLink().equals(getFlowLink()))
{
return false;
}
}
return true;
}
}