package com.idega.block.trade.stockroom.presentation; import java.rmi.RemoteException; import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.Vector; import javax.transaction.SystemException; import javax.transaction.TransactionManager; import com.idega.block.category.presentation.CategoryWindow; import com.idega.block.trade.stockroom.business.ProductBusiness; import com.idega.block.trade.stockroom.data.Product; import com.idega.block.trade.stockroom.data.ProductCategory; import com.idega.block.trade.stockroom.data.ProductHome; import com.idega.business.IBOLookup; import com.idega.core.localisation.business.ICLocaleBusiness; import com.idega.core.localisation.presentation.LocalePresentationUtil; import com.idega.data.EntityFinder; import com.idega.data.IDOLookup; import com.idega.idegaweb.IWApplicationContext; import com.idega.idegaweb.IWBundle; import com.idega.idegaweb.IWMainApplication; import com.idega.idegaweb.IWResourceBundle; import com.idega.presentation.IWContext; import com.idega.presentation.text.Text; import com.idega.presentation.ui.DropdownMenu; import com.idega.presentation.ui.GenericButton; import com.idega.presentation.ui.HiddenInput; import com.idega.presentation.ui.SelectionDoubleBox; import com.idega.presentation.ui.SubmitButton; import com.idega.transaction.IdegaTransactionManager; /** * Title: idegaWeb TravelBooking * Description: * Copyright: Copyright (c) 2001 * Company: idega * @author <a href="mailto:gimmi@idega.is">Grimur Jonsson</a> * @version 1.0 */ public class ProductCategoryEditor extends CategoryWindow { private IWBundle bundle = null; private IWResourceBundle iwrb = null; public static final String IW_BUNDLE_IDENTIFIER = "com.idega.block.trade"; public static final String SELECTED_CATEGORY = "pr_cat_seleted_cat"; private static final String _action = "pr_cat_editor_action"; private static final String _parameterSaveCategory = "pr_cat_view_cat"; private static final String _parameterClose = "pr_cat_close"; private static final String _parameterProductIn = "pr_cat_pr_in"; private static final String _parameterProductOut = "pr_cat_pr_out"; private static final String _parameterProductFilter = "pr_cat_filt"; private static final String _parameterProductFilterUnusedOnly = "pr_cat_filt_unsd"; private static final String _parameterProductFilterAllProducts = "pr_cat_filt_all"; private static final String _parameterLocale = "pr_cat_loc"; private static final String _parameterSelectedCategory = SELECTED_CATEGORY; private int maxWidth = 50; private int height = 10; int _selectedCategory = -1; ProductCategory _productCategory = null; List _categories = null; private int localeId = 1; public ProductCategoryEditor() { super.setWidth(600); super.setHeight(460); super.setUnMerged(); } public void main(IWContext iwc) throws Exception { init(iwc); if (this._selectedCategory != -1) { String action = iwc.getParameter(_action); if (action == null || "".equals(action)) { viewCategory(iwc); } else if (action.equals(_parameterClose)) { super.setParentToReload(); super.close(); } else { saveAssignment(iwc); } } } private void init(IWContext iwc) { this.bundle = getBundle(iwc); this.iwrb = this.bundle.getResourceBundle(iwc); this.localeId = iwc.getCurrentLocaleId(); try { String sSelCat = iwc.getParameter(SELECTED_CATEGORY); if (sSelCat != null) { this._selectedCategory = Integer.parseInt(sSelCat); this._productCategory = ( (com.idega.block.trade.stockroom.data.ProductCategoryHome) com.idega.data.IDOLookup.getHomeLegacy( ProductCategory.class)).findByPrimaryKeyLegacy( this._selectedCategory); } this._categories = getProductBusiness(iwc).getProductCategories(); } catch (Exception e) { e.printStackTrace(System.err); this._categories = new Vector(); } } public String getBundleIdentifier() { return IW_BUNDLE_IDENTIFIER; } private void viewCategory(IWContext iwc) throws RemoteException { try { String sFilter = iwc.getParameter(ProductCategoryEditor._parameterProductFilter); String sLocale = iwc.getParameter(ProductCategoryEditor._parameterLocale); int iFilter = -1; int iLocale = -1; if (sFilter != null) { iFilter = Integer.parseInt(sFilter); } if (sLocale != null) { if (sLocale.equals("-1")) { iLocale = -1; } else { iLocale = ICLocaleBusiness.getLocaleId(ICLocaleBusiness.getLocaleFromLocaleString(sLocale)); } } else { //if (iLocale == -1) iLocale = iwc.getCurrentLocaleId(); sLocale = ICLocaleBusiness.getLocale(iLocale).toString(); } int defaultLocaleID = ICLocaleBusiness.getLocaleId(iwc.getIWMainApplication().getSettings().getDefaultLocale()); List products = getProductBusiness(iwc).getProducts(this._productCategory); Collection allProducts = ((ProductHome) IDOLookup.getHome(Product.class)).findProducts(-1, -1, null, null, null, iLocale, iFilter); allProducts.removeAll(products); SelectionDoubleBox sdb = new SelectionDoubleBox(ProductCategoryEditor._parameterProductOut, ProductCategoryEditor._parameterProductIn); /** @todo Sortera productin */ Product product; Iterator iter = allProducts.iterator(); String productName; while (iter.hasNext()) { product = (Product) iter.next(); productName = product.getProductName(this.localeId, defaultLocaleID, null); if (productName == null) { productName = this.iwrb.getLocalizedString("trade.not_localized", "Not localized"); } // product = (Product) iter.next(); sdb.getLeftBox().addMenuElement(((Integer) product.getPrimaryKey()).intValue(), productName); } iter = products.iterator(); while (iter.hasNext()) { // product = getProductHome().findByPrimaryKey(iter.next()); product = (Product) iter.next(); productName = product.getProductName(this.localeId, null); if (productName == null) { productName = this.iwrb.getLocalizedString("trade.not_localized", "Not localized"); } sdb.getRightBox().addMenuElement(((Integer) product.getPrimaryKey()).intValue(), productName); } sdb.getRightBox().selectAllOnSubmit(); sdb.getLeftBox().setHeight(this.height); sdb.getRightBox().setHeight(this.height); sdb.getLeftBox().setWidth("130"); sdb.getRightBox().setWidth("130"); //sdb.getLeftBox().setStyleAttribute(IWConstants.BUILDER_FONT_STYLE_INTERFACE + "width:130px"); //sdb.getRightBox().setStyleAttribute(IWConstants.BUILDER_FONT_STYLE_INTERFACE + "width:130px"); SubmitButton save = new SubmitButton(this.iwrb.getLocalizedImageButton("save", "Save"), ProductCategoryEditor._action, ProductCategoryEditor._parameterSaveCategory); SubmitButton close = new SubmitButton(this.iwrb.getLocalizedImageButton("close", "Close"), ProductCategoryEditor._action, ProductCategoryEditor._parameterClose); DropdownMenu filter = new DropdownMenu(ProductCategoryEditor._parameterProductFilter); filter.addMenuElement(-1, this.iwrb.getLocalizedString("trade.all_products", "All products")); filter.addMenuElement( getProductHome().getProductFilterNotConnectedToAnyProductCategory(), this.iwrb.getLocalizedString("trade.unused_products_only", "Unused products only")); if (sFilter != null) { filter.setSelectedElement(sFilter); } DropdownMenu loc = LocalePresentationUtil.getAvailableLocalesDropdown(iwc.getIWMainApplication(), _parameterLocale); loc.addMenuElementFirst("-1", this.iwrb.getLocalizedString("all_locales", "All locales")); loc.setToSubmit(); loc.setSelectedElement(sLocale); // super.addRight(iwrb.getLocalizedString("trade.product_filter","Product filter"), filter, false, true); super.addRight(this.iwrb.getLocalizedString("only_show_products_localized_in", "Only show products localized in")+" :", loc, true, true); this.addHiddenInput(new HiddenInput(ProductCategoryEditor.SELECTED_CATEGORY, Integer.toString(this._selectedCategory))); super.maintainClearCacheKeyInForm(iwc); sdb.addToScripts(this.getParentPage().getAssociatedScript()); GenericButton add = sdb.getRightButton(); add.setOnClick("move( this.form." + sdb.getLeftBox().getName() + ", this.form." + sdb.getRightBox().getName() + " )"); GenericButton remove = sdb.getLeftButton(); remove.setOnClick("move( this.form." + sdb.getRightBox().getName() + ", this.form." + sdb.getLeftBox().getName() + " )"); super.addLeft(this.iwrb.getLocalizedString("available_products", "Available products"), sdb.getLeftBox(), true); super.addLeft(this.iwrb.getLocalizedString("add_selected", "Add selected") + Text.NON_BREAKING_SPACE + Text.NON_BREAKING_SPACE, add, false); super.addLeft( this.iwrb.getLocalizedString("remove_selected", "Remove selected") + Text.NON_BREAKING_SPACE + Text.NON_BREAKING_SPACE, remove, false); super.addLeft(this.iwrb.getLocalizedString("selected_products", "Selected products"), sdb.getRightBox(), true); super.addSubmitButton(close); super.addSubmitButton(save); } catch (Exception e) { e.printStackTrace(System.err); } } private void saveAssignment(IWContext iwc) throws RemoteException { String[] in = iwc.getParameterValues(ProductCategoryEditor._parameterProductIn); TransactionManager tm = IdegaTransactionManager.getInstance(); try { tm.begin(); List products = EntityFinder.getInstance().findRelated(this._productCategory, Product.class); this._productCategory.removeProducts(products); if (in != null) { for (int i = 0; i < in.length; i++) { this._productCategory.addTo(Product.class, Integer.parseInt(in[i])); } } tm.commit(); IWMainApplication.getIWCacheManager().invalidateCache(ProductCatalog.CACHE_KEY); } catch (Exception e) { e.printStackTrace(System.err); try { tm.rollback(); } catch (SystemException se) { se.printStackTrace(System.err); } } super.clearCache(iwc); viewCategory(iwc); } private Text getText(String content) { Text text = new Text(content); return text; } private ProductBusiness getProductBusiness(IWApplicationContext iwac) throws RemoteException { return (ProductBusiness) IBOLookup.getServiceInstance(iwac, ProductBusiness.class); } private ProductHome getProductHome() throws RemoteException { return (ProductHome) IDOLookup.getHome(Product.class); } }