package com.idega.content.business.categories; import java.rmi.RemoteException; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.jdom.Document; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Service; import com.idega.content.business.ContentConstants; import com.idega.content.business.categories.event.CategoryAddedEvent; import com.idega.content.business.categories.event.CategoryDeletedEvent; import com.idega.content.data.ContentCategory; import com.idega.content.presentation.categories.CategoriesListViewer; import com.idega.core.builder.business.BuilderService; import com.idega.core.builder.business.BuilderServiceFactory; import com.idega.idegaweb.IWBundle; import com.idega.idegaweb.IWMainApplication; import com.idega.idegaweb.IWResourceBundle; import com.idega.presentation.IWContext; import com.idega.util.CoreConstants; import com.idega.util.CoreUtil; import com.idega.util.StringUtil; import com.idega.util.expression.ELUtil; @Scope(BeanDefinition.SCOPE_SINGLETON) @Service("content.CategoriesEngineBean") public class CategoriesEngineBean implements CategoriesEngine { public List<String> getInfo() { IWContext iwc = CoreUtil.getIWContext(); if (iwc == null) { return null; } IWResourceBundle iwrb = null; try { iwrb = IWMainApplication.getIWMainApplication(iwc).getBundle(ContentConstants.IW_BUNDLE_IDENTIFIER).getResourceBundle(iwc); } catch(Exception e) { e.printStackTrace(); return null; } if (iwrb == null) { return null; } List<String> info = new ArrayList<String>(); info.add(iwrb.getLocalizedString("loading", "Loading...")); // 0 info.add(iwrb.getLocalizedString("disable_category_message", "Do you want to disable this category?")); // 1 info.add(iwrb.getLocalizedString("enable_category_message", "Do you want to enable this category?")); // 2 info.add(iwrb.getLocalizedString("delete_category_message", "Do you want to delete this category?")); // 3 info.add(iwrb.getLocalizedString("disable_category", "Disable category")); // 4 info.add(iwrb.getLocalizedString("enable_category", "Enable category")); // 5 info.add(iwrb.getLocalizedString("deleting", "Deleting...")); // 6 info.add(iwrb.getLocalizedString("enter_name_for_category", "Please, enter name for category!")); // 7 info.add(iwrb.getLocalizedString("saving", "Saving...")); // 8 info.add(iwrb.getLocalizedString("no_categories_found", "There are no categories.")); // 9 return info; } public Document getCategoriesList(String locale) { return getCategoriesListViewer(locale); } public List<ContentCategory> getCategoriesByLocale(String locale) { CategoryBean bean = CategoryBean.getInstance(); if (bean == null) { return null; } List<ContentCategory> categories = new ArrayList<ContentCategory>(bean.getCategories()); if (categories.size() == 0) { return null; } ContentCategory category = null; Map<String, String> categoryNames = null; List<ContentCategory> filtered = new ArrayList<ContentCategory>(); for (int i = 0; i < categories.size(); i++) { category = categories.get(i); categoryNames = category.getNames(); if (categoryNames.get(locale) != null) { filtered.add(category); } } if (filtered.size() == 0) { return null; } return filtered; } public boolean deleteCategory(String id) { ContentCategory category = getCategory(id); if (category == null) { return false; } if (CategoryBean.getInstance().deleteCategory(id)) { CategoryBean.getInstance().storeCategories(true); ELUtil.getInstance().publishEvent(new CategoryDeletedEvent(id)); return true; } return false; } public boolean renameCategory(String id, String locale, String newName) { ContentCategory category = getCategory(id); if (category == null) { return false; } category.addName(locale, newName); CategoryBean.getInstance().storeCategories(true); return true; } /** * @param id Category id. * @return ContentCategory instance if exists. */ private ContentCategory getCategory(String id) { if (id == null) { return null; } if (CoreConstants.EMPTY.equals(id)) { return null; } return CategoryBean.getInstance().getCategory(id); } public String manageCategoryUsage(String id, boolean disable) { ContentCategory category = getCategory(id); if (category == null) { return null; } category.setDisabled(disable); CategoryBean.getInstance().storeCategories(true); IWBundle bundle = IWMainApplication.getDefaultIWMainApplication().getBundle(ContentConstants.IW_BUNDLE_IDENTIFIER); if (bundle == null) { return null; } if (disable) { return bundle.getVirtualPathWithFileNameString("images/disabled.png"); } return bundle.getVirtualPathWithFileNameString("images/enabled.png"); } public Document addCategory(String name, String locale) { return isAddCategorySuccessful(name,locale) ? getCategoriesListViewer(locale) : null; } private boolean isAddCategorySuccessful(String name, String locale){ if (name == null) { return Boolean.FALSE; } String categoryId = CategoryBean.getInstance().addCategory(name, locale); if (StringUtil.isEmpty(categoryId)){ return Boolean.FALSE; } ELUtil.getInstance().publishEvent(new CategoryAddedEvent(categoryId)); return Boolean.TRUE; } private Document getCategoriesListViewer(String locale) { if (locale == null) { return null; } if (CoreConstants.EMPTY.equals(locale)) { return null; } IWContext iwc = CoreUtil.getIWContext(); if (iwc == null) { return null; } BuilderService builder = null; try { builder = BuilderServiceFactory.getBuilderService(iwc); } catch (RemoteException e) { e.printStackTrace(); return null; } if (builder == null) { return null; } return builder.getRenderedComponent(iwc, new CategoriesListViewer(locale), false); } }