Package com.agiletec.plugins.jpcontentrefs.aps.system.services.contentrelations

Source Code of com.agiletec.plugins.jpcontentrefs.aps.system.services.contentrelations.AbstractContentRefManager

/*
*
* Copyright 2013 Entando S.r.l. (http://www.entando.com) All rights reserved.
*
* This file is part of Entando software.
* Entando 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 2013 Entando S.r.l. (http://www.entando.com) All rights reserved.
*
*/
package com.agiletec.plugins.jpcontentrefs.aps.system.services.contentrelations;

import java.util.ArrayList;
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.baseconfig.ConfigInterface;
import com.agiletec.plugins.jacms.aps.system.services.content.IContentManager;
import com.agiletec.plugins.jacms.aps.system.services.content.model.SmallContentType;
import org.slf4j.Logger;

/**
* @author E.Santoboni
*/
public abstract class AbstractContentRefManager extends AbstractService implements IContentRefManager {
 
  @Override
  public void init() throws Exception {
    this.loadContentTypeElement();
    ApsSystemUtils.getLogger().debug(this.getClass().getName() + ": initialized");
  }
 
  private void loadContentTypeElement() throws ApsSystemException {
    Logger log = ApsSystemUtils.getLogger();
    try {
      String xml = this.getConfigInterface().getConfigItem(this.getConfigItemName());
      if (xml == null) {
        throw new ApsSystemException("Missing config item: " + this.getConfigItemName());
      } else {
        log.trace(this.getConfigItemName()+": " + xml);
        AbstractContentRelactionDOM catDom = this.getConfigDom(xml);
        this.setContentTypeElements(catDom.getContentTypes());
      }
    } catch (Throwable t) {
      ApsSystemUtils.logThrowable(t, this, "loadContentTypeCategory");
      throw new ApsSystemException("Errorloading content type element", t);
    }
  }
 
  public abstract String getConfigItemName();
 
  public abstract AbstractContentRelactionDOM getConfigDom() throws ApsSystemException;
 
  public abstract AbstractContentRelactionDOM getConfigDom(String xml) throws ApsSystemException;
 
  @Override
  public void addRelation(String elementCode, String contentType) throws ApsSystemException {
    try {
      SmallContentType smallContentType =
        (SmallContentType) this.getContentManager().getSmallContentTypesMap().get(contentType);
      if (null == smallContentType) {
        throw new ApsSystemException("Content type missing : " + contentType);
      }
      if (null == this.getContentTypeElements().get(contentType)) {
        this.getContentTypeElements().put(contentType, new ArrayList<String>());
      }
      this.checkReference(elementCode);
      List<String> contentTypeCategories = this.getContentTypeElements().get(contentType);
      if (!contentTypeCategories.contains(elementCode)) {
        contentTypeCategories.add(elementCode);
      }
     
      this.updateConfig();
    } catch (Throwable t) {
      ApsSystemUtils.logThrowable(t, this, "addCategoryRelation");
      throw new ApsSystemException("Error adding Category Relation", t);
    }
  }
 
  protected abstract void checkReference(String elementCode);
 
  @Override
  public void removeRelation(String categoryCode, String contentType) throws ApsSystemException {
    try {
      List<String> contentTypeElements = this.getContentTypeElements().get(contentType);
      contentTypeElements.remove(categoryCode);
      this.updateConfig();
    } catch (ApsSystemException e) {
      ApsSystemUtils.logThrowable(e, this, "removeRelation");
      throw e;
    }
  }
 
  private void updateConfig() throws ApsSystemException {
    try {
      AbstractContentRelactionDOM dom = this.getConfigDom();
      dom.setContent(this.getContentTypeElements());
      String xml = dom.getXMLDocument();
      this.getConfigInterface().updateConfigItem(this.getConfigItemName(), xml);
    } catch (Throwable t) {
      ApsSystemUtils.logThrowable(t, this, "updateConfig");
      throw new ApsSystemException("Error adding item " + this.getConfigItemName(), t);
    }
  }
 
  protected ConfigInterface getConfigInterface() {
    return _configInterface;
  }
  public void setConfigInterface(ConfigInterface configInterface) {
    this._configInterface = configInterface;
  }
 
  protected IContentManager getContentManager() {
    return _contentManager;
  }
  public void setContentManager(IContentManager contentManager) {
    this._contentManager = contentManager;
  }
 
  protected Map<String, List<String>> getContentTypeElements() {
    return _contentTypeElements;
  }
  protected void setContentTypeElements(Map<String, List<String>> contentTypeElements) {
    this._contentTypeElements = contentTypeElements;
  }
 
  private Map<String, List<String>> _contentTypeElements;
 
  private ConfigInterface _configInterface;
  private IContentManager _contentManager;
 
}
TOP

Related Classes of com.agiletec.plugins.jpcontentrefs.aps.system.services.contentrelations.AbstractContentRefManager

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.