package org.nightlabs.jfire.trade.ui.articlecontainer.detail.action.reverse;
import org.nightlabs.jdo.ObjectIDUtil;
import org.nightlabs.jfire.organisation.Organisation;
import org.nightlabs.jfire.store.id.ProductID;
import org.nightlabs.progress.ProgressMonitor;
/**
* Default implementation of {@link IProductIDParser}, which expects an
* "normal" organisationID as string (e.g. yourorganisationname.host.topleveldomain)
* and the productID as Base36 encoded string.
*
* @author Daniel Mazurek - daniel [at] nightlabs [dot] de
*
*/
public class DefaultProductIDParser
implements IProductIDParser
{
private static final String SEPARATOR = "/"; //$NON-NLS-1$
/* (non-Javadoc)
* @see org.nightlabs.jfire.trade.ui.articlecontainer.detail.action.reverse.IProductIDParser#isValid(java.lang.String, org.nightlabs.progress.ProgressMonitor)
*/
@Override
public ProductID getProductID(String productIDString, ProgressMonitor monitor)
{
String organisationID = getOrganisationID(productIDString);
if (organisationID == null) {
return null;
}
Long productID = getProductID(productIDString);
if (productID == null) {
return null;
}
if (organisationID != null && productID != null) {
return ProductID.create(organisationID, productID);
}
return null;
}
public static String getOrganisationID(String productIDString)
{
if (productIDString == null)
return null;
int index = productIDString.lastIndexOf(SEPARATOR);
if (index != -1) {
String organisationID = productIDString.substring(0, index);
try {
Organisation.assertValidOrganisationID(organisationID);
} catch (IllegalArgumentException e) {
return null;
}
return organisationID;
}
return null;
}
public static Long getProductID(String productIDString)
{
if (productIDString == null)
return null;
int index = productIDString.lastIndexOf(SEPARATOR);
if (index != -1) {
String productID = productIDString.substring(index+1);
try {
return ObjectIDUtil.parseLongObjectIDField(productID);
} catch (NumberFormatException e) {
return null;
}
}
return null;
}
}