/******************************************************************************* * ***** BEGIN LICENSE BLOCK Version: MPL 1.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with the * License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for * the specific language governing rights and limitations under the License. * * The Original Code is the OpenCustomer CRM. * * The Initial Developer of the Original Code is Thomas Bader (Bader & Jene * Software-Ingenieurb�ro). Portions created by the Initial Developer are * Copyright (C) 2005 the Initial Developer. All Rights Reserved. * * Contributor(s): Thomas Bader <thomas.bader@bader-jene.de> * * ***** END LICENSE BLOCK ***** */ package org.opencustomer.webapp.module.system.settings.list; import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; import javax.servlet.http.HttpServletRequest; import org.apache.log4j.Logger; import org.apache.struts.action.ActionMessages; import org.opencustomer.db.vo.system.ListConfigurationVO; import org.opencustomer.framework.db.util.engine.configuration.Configuration; import org.opencustomer.framework.db.util.engine.configuration.Join; import org.opencustomer.framework.db.util.engine.configuration.Property; import org.opencustomer.webapp.action.EditPageAction; import org.opencustomer.webapp.util.table.TableFactory; public class PageColumnsAction extends EditPageAction<PageColumnsForm> { private static Logger log = Logger.getLogger(PageColumnsAction.class); @Override public void readForm(PageColumnsForm form, ActionMessages errors, HttpServletRequest request) { ListConfigurationVO listConfiguration = (ListConfigurationVO) getPanel().getEntity(); if(form.getPositions().isEmpty()) { listConfiguration.setColumns(null); } else { ArrayList<Integer> positions = new ArrayList<Integer>(); for(String value : form.getPositions().values()) { positions.add(Integer.valueOf(value)); } Collections.sort(positions); Integer[] columns = new Integer[positions.size()]; for(int i=0; i<columns.length; i++) { Integer position = positions.get(i); for(int column : form.getPositions().keySet()) { if(position.toString().equals(form.getPositions().get(column))) { columns[i] = column; break; } } } listConfiguration.setColumns(columns); } } @Override public void writeForm(PageColumnsForm form, ActionMessages errors, HttpServletRequest request) { ListConfigurationVO listConfiguration = (ListConfigurationVO) getPanel().getEntity(); if(listConfiguration.getColumns() != null) { for(int i=0; i<listConfiguration.getColumns().length; i++) { form.setPosition(listConfiguration.getColumns()[i], Integer.toString(i+1)); } } } @Override protected void preOperations(PageColumnsForm form, ActionMessages errors, HttpServletRequest request) { ListConfigurationVO listConfiguration = (ListConfigurationVO) getPanel().getEntity(); if(getPanel().getAttribute("entities") == null) { if(log.isDebugEnabled()) { log.debug("add entities for "+listConfiguration.getType()); } LinkedHashMap<String, Entity> entities = new LinkedHashMap<String, Entity>(); Configuration configuration = TableFactory.getInstance().getConfiguration(listConfiguration.getType().getName()); entities.put(configuration.getEntity().getMessageKey(), new Entity(configuration.getEntity().getMessageKey())); HashSet<Property> addedProperties = new HashSet<Property>(); for(Property property : configuration.getProperties()) { if(property.getName().startsWith(configuration.getEntity().getAlias()+".")) { entities.get(configuration.getEntity().getMessageKey()).getProperties().add(property); addedProperties.add(property); } else if(configuration.getEntity().getMessageKey().equals(property.getEntityMessageKey())) { entities.get(property.getEntityMessageKey()).getProperties().add(property); addedProperties.add(property); } } for(Property property : configuration.getProperties()) { for(Join join : configuration.getJoins()) { if(!addedProperties.contains(property)) { if(property.getName().startsWith(join.getAlias()+".")) { if(log.isDebugEnabled()) log.debug("add property by entity: "+property); if(!entities.containsKey(join.getMessageKey())) { entities.put(join.getMessageKey(), new Entity(join.getMessageKey())); } entities.get(join.getMessageKey()).getProperties().add(property); addedProperties.add(property); } else if(join.getMessageKey().equals(property.getEntityMessageKey())) { if(log.isDebugEnabled()) log.debug("add property by entity messageKey: "+property); if(!entities.containsKey(property.getEntityMessageKey())) { entities.put(property.getEntityMessageKey(), new Entity(property.getEntityMessageKey())); } entities.get(property.getEntityMessageKey()).getProperties().add(property); addedProperties.add(property); } } } // add property without entity if(!addedProperties.contains(property)) { if(log.isDebugEnabled()) log.debug("add property without entity: "+property); if(!entities.containsKey(property.getEntityMessageKey())) { entities.put(property.getEntityMessageKey(), new Entity(property.getEntityMessageKey())); } entities.get(property.getEntityMessageKey()).getProperties().add(property); addedProperties.add(property); } } getPanel().setAttribute("entities", entities.values()); } } public class Entity { private String messageKey; private List<Property> properties = new ArrayList<Property>(); public Entity() { } public Entity(String messageKey) { this.setMessageKey(messageKey); } public String getMessageKey() { return messageKey; } public void setMessageKey(String messageKey) { this.messageKey = messageKey; } public List<Property> getProperties() { return properties; } public void setProperties(List<Property> properties) { this.properties = properties; } } }