/* * * Copyright 2005 AgileTec s.r.l. (http://www.agiletec.it) All rights reserved. * * This file is part of jAPS software. * jAPS is a free software; * you can redistribute it and/or modify it * under the terms of the GNU General Public License (GPL) as published by the Free Software Foundation; version 2. * * See the file License for the specific language governing permissions * and limitations under the License * * * * Copyright 2005 AgileTec s.r.l. (http://www.agiletec.it) All rights reserved. * */ package com.agiletec.aps.system.services.showlettype; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; import com.agiletec.aps.system.ApsSystemUtils; import com.agiletec.aps.system.common.AbstractService; import com.agiletec.aps.system.exception.ApsSystemException; import com.agiletec.aps.system.services.lang.events.LangsChangedEvent; import com.agiletec.aps.system.services.lang.events.LangsChangedObserver; import com.agiletec.aps.util.ApsProperties; /** * Servizio di gestione dei tipi di showlet (ShowletType) definiti * nel sistema. (Questo servizio non riguarda la configurazione delle * istanze di showlet nelle pagine) * @author */ public class ShowletTypeManager extends AbstractService implements IShowletTypeManager, LangsChangedObserver { @Override public void init() throws Exception { this.loadShowletTypes(); ApsSystemUtils.getLogger().config(this.getClass().getName() + ": initialized " + this._showletTypes.size() + " showlet types"); } /** * Caricamento da db del catalogo dei tipi di showlet. * @throws ApsSystemException In caso di errori di lettura da db. */ private void loadShowletTypes() throws ApsSystemException { try { this._showletTypes = this.getShowletTypeDAO().loadShowletTypes(); Iterator<ShowletType> iter = this._showletTypes.values().iterator(); while (iter.hasNext()) { ShowletType type = iter.next(); String mainTypeCode = type.getParentTypeCode(); if (null != mainTypeCode) { type.setParentType(this._showletTypes.get(mainTypeCode)); } } } catch (Throwable t) { ApsSystemUtils.logThrowable(t, this, "loadShowletTypes"); throw new ApsSystemException("Error loading showlets types", t); } } @Override public void updateFromLangsChanged(LangsChangedEvent event) { try { this.init(); } catch (Throwable t) { ApsSystemUtils.logThrowable(t, this, "updateFromLangsChanged", "Error on init method"); } } @Override public ShowletType getShowletType(String code) { return this._showletTypes.get(code); } @Override public List<ShowletType> getShowletTypes() { List<ShowletType> types = new ArrayList<ShowletType>(); Iterator<ShowletType> masterTypesIter = this._showletTypes.values().iterator(); while (masterTypesIter.hasNext()) { ShowletType showletType = masterTypesIter.next(); types.add(showletType.clone()); } return types; } @Override public void addShowletType(ShowletType showletType) throws ApsSystemException { try { ShowletType type = this._showletTypes.get(showletType.getCode()); if (null != type) { ApsSystemUtils.getLogger().severe("Type already exists : type code" + showletType.getCode()); return; } String parentTypeCode = showletType.getParentTypeCode(); if (null != parentTypeCode && null == this._showletTypes.get(parentTypeCode)) { throw new ApsSystemException("ERROR : Parent type '" + parentTypeCode + "' doesn't exists"); } if (null == parentTypeCode && null != showletType.getConfig()) { throw new ApsSystemException("ERROR : Parent type null and default config not null"); } if (null != showletType.getTypeParameters() && null != showletType.getConfig()) { throw new ApsSystemException("ERROR : Params not null and config not null"); } this.getShowletTypeDAO().addShowletType(showletType); this._showletTypes.put(showletType.getCode(), showletType); } catch (Throwable t) { ApsSystemUtils.logThrowable(t, this, "addShowletType"); throw new ApsSystemException("Error adding a Showlet Type", t); } } @Override public void deleteShowletType(String showletTypeCode) throws ApsSystemException { try { ShowletType type = this._showletTypes.get(showletTypeCode); if (null == type) { ApsSystemUtils.getLogger().severe("Type not exists : type code" + showletTypeCode); return; } if (type.isLocked()) { ApsSystemUtils.getLogger().severe("A loked showlet can't be deleted - type " + showletTypeCode); return; } this.getShowletTypeDAO().deleteShowletType(showletTypeCode); this._showletTypes.remove(showletTypeCode); } catch (Throwable t) { ApsSystemUtils.logThrowable(t, this, "deleteShowletType"); throw new ApsSystemException("Error deleting showlet type", t); } } @Override public void updateShowletType(String showletTypeCode, ApsProperties titles, ApsProperties defaultConfig) throws ApsSystemException { try { ShowletType type = this._showletTypes.get(showletTypeCode); if (null == type) { ApsSystemUtils.getLogger().severe("Type not exists : type code" + showletTypeCode); return; } if (type.isLocked() || !type.isLogic() || !type.isUserType()) { this.updateShowletTypeTitles(showletTypeCode, titles); return; } this.getShowletTypeDAO().updateShowletType(showletTypeCode, titles, defaultConfig); type.setTitles(titles); type.setConfig(defaultConfig); } catch (Throwable t) { ApsSystemUtils.logThrowable(t, this, "updateShowletTypeTitles"); throw new ApsSystemException("Error updating Showlet type titles : type code" + showletTypeCode, t); } } @Override public void updateShowletTypeTitles(String showletTypeCode, ApsProperties titles) throws ApsSystemException { try { ShowletType type = this._showletTypes.get(showletTypeCode); if (null == type) { ApsSystemUtils.getLogger().severe("Type not exists : type code" + showletTypeCode); return; } this.getShowletTypeDAO().updateShowletTypeTitles(showletTypeCode, titles); type.setTitles(titles); } catch (Throwable t) { ApsSystemUtils.logThrowable(t, this, "updateShowletTypeTitles"); throw new ApsSystemException("Error updating Showlet type titles : type code" + showletTypeCode, t); } } protected IShowletTypeDAO getShowletTypeDAO() { return _showletTypeDao; } public void setShowletTypeDAO(IShowletTypeDAO showletTypeDAO) { this._showletTypeDao = showletTypeDAO; } private Map<String, ShowletType> _showletTypes; private IShowletTypeDAO _showletTypeDao; }