package org.nightlabs.jfire.dynamictrade.ui.detail;
import java.util.Collection;
import org.eclipse.swt.widgets.Composite;
import org.nightlabs.jdo.NLJDOHelper;
import org.nightlabs.jfire.dynamictrade.store.DynamicProductType;
import org.nightlabs.jfire.dynamictrade.ui.resource.Messages;
import org.nightlabs.jfire.prop.DataBlock;
import org.nightlabs.jfire.prop.DataBlockGroup;
import org.nightlabs.jfire.prop.DataField;
import org.nightlabs.jfire.prop.IStruct;
import org.nightlabs.jfire.prop.PropertySet;
import org.nightlabs.jfire.prop.dao.StructLocalDAO;
import org.nightlabs.jfire.prop.datafield.ImageDataField;
import org.nightlabs.jfire.prop.exception.DataBlockNotFoundException;
import org.nightlabs.jfire.store.ProductType;
import org.nightlabs.jfire.store.dao.ProductTypeDAO;
import org.nightlabs.jfire.store.id.ProductTypeID;
import org.nightlabs.jfire.trade.ui.detail.AbstractProductTypeDetailViewComposite;
import org.nightlabs.progress.ProgressMonitor;
import org.nightlabs.progress.SubProgressMonitor;
/**
* This is the Composite which is used by the {@link DynamicProductTypeDetailView}
*
* @author Alexander Bieber <!-- alex [AT] nightlabs [DOT] de -->
*/
public class DynamicProductTypeDetailViewComposite
extends AbstractProductTypeDetailViewComposite
{
public DynamicProductTypeDetailViewComposite(Composite parent, int style, LayoutMode layoutMode, LayoutDataMode layoutDataMode) {
super(parent, style, layoutMode, layoutDataMode);
}
public DynamicProductTypeDetailViewComposite(Composite parent, int style) {
super(parent, style);
}
public static final String[] FETCH_GROUP_PRODUCT_TYPE_DETAIL = new String[] {
ProductType.FETCH_GROUP_NAME, ProductType.FETCH_GROUP_OWNER, ProductType.FETCH_GROUP_VENDOR,
ProductType.FETCH_GROUP_PRODUCT_TYPE_GROUPS, ProductType.FETCH_GROUP_EXTENDED_PRODUCT_TYPE_ID,
DynamicProductType.FETCH_GROUP_PROPERTY_SET, PropertySet.FETCH_GROUP_FULL_DATA
};
public static final String[] FETCH_GROUP_PRODUCT_TYPE_CATEGORY = new String[] {
ProductType.FETCH_GROUP_NAME,
ProductType.FETCH_GROUP_EXTENDED_PRODUCT_TYPE_NO_LIMIT
};
private String description;
private byte[] img;
@Override
protected ProductType fetchProductType(ProductTypeID productTypeID,
ProgressMonitor monitor) {
final DynamicProductType productType = (DynamicProductType) ProductTypeDAO.sharedInstance().getProductType(
productTypeID,
FETCH_GROUP_PRODUCT_TYPE_DETAIL,
NLJDOHelper.MAX_FETCH_DEPTH_NO_LIMIT,
new SubProgressMonitor(monitor, 50)
);
description = null;
img = null;
final DynamicProductType category = (DynamicProductType) ProductTypeDAO.sharedInstance().getProductType(
productType.getExtendedProductTypeID(),
FETCH_GROUP_PRODUCT_TYPE_CATEGORY,
NLJDOHelper.MAX_FETCH_DEPTH_NO_LIMIT,
new SubProgressMonitor(monitor, 50)
);
StringBuilder categoryText = new StringBuilder();
ProductType cat = category;
while (cat != null) {
if (categoryText.length() != 0)
categoryText.insert(0, Messages.getString("org.nightlabs.jfire.dynamictrade.ui.detail.DynamicProductTypeDetailViewComposite.categoryText.separator")); //$NON-NLS-1$
categoryText.insert(0, cat.getName().getText());
cat = cat.getExtendedProductType();
}
description = categoryText.toString();
if (productType.getPropertySet() != null) {
PropertySet props = productType.getPropertySet();
IStruct struct = StructLocalDAO.sharedInstance().getStructLocal(props.getStructLocalObjectID(), monitor);
if (props != null)
props.inflate(struct);
Collection<DataBlockGroup> dataBlockGroups = props.getDataBlockGroups();
imageSearch: for (DataBlockGroup dataBlockGroup : dataBlockGroups) {
DataBlock block = null;
try {
block = dataBlockGroup.getDataBlockByIndex(0);
} catch (DataBlockNotFoundException e) {
continue imageSearch;
}
Collection<DataField> dataFields = block.getDataFields();
for (DataField dataField : dataFields) {
if (dataField instanceof ImageDataField) {
img = ((ImageDataField)dataField).getContent();
break imageSearch;
}
}
}
}
return productType;
}
@Override
protected String fetchProductTypeDescription(ProductType productType,
ProgressMonitor monitor) {
return description;
}
@Override
protected byte[] fetchProductTypeImage(ProductType productType,
ProgressMonitor monitor) {
return img;
}
@Override
protected String fetchProductTypeName(ProductType productType,
ProgressMonitor monitor) {
return productType.getName().getText();
}
}