/*
*
* Copyright (C) 2007-2015 Licensed to the Comunes Association (CA) under
* one or more contributor license agreements (see COPYRIGHT for details).
* The CA licenses this file to you under the GNU Affero General Public
* License version 3, (the "License"); you may not use this file except in
* compliance with the License. This file is part of kune.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
package cc.kune.core.server;
import java.util.Date;
import java.util.List;
import cc.kune.common.shared.i18n.I18nTranslationService;
import cc.kune.core.client.errors.ContainerNotPermittedException;
import cc.kune.core.client.errors.ContentNotPermittedException;
import cc.kune.core.server.content.ContainerManager;
import cc.kune.core.server.content.ContentManager;
import cc.kune.core.server.content.CreationService;
import cc.kune.core.server.manager.ToolConfigurationManager;
import cc.kune.core.server.tool.ServerTool;
import cc.kune.core.server.tool.ServerToolRegistry;
import cc.kune.core.server.tool.ServerToolTarget;
import cc.kune.core.shared.domain.ContentStatus;
import cc.kune.domain.AccessLists;
import cc.kune.domain.Container;
import cc.kune.domain.Content;
import cc.kune.domain.Group;
import cc.kune.domain.ToolConfiguration;
import cc.kune.domain.User;
import com.google.inject.Inject;
// TODO: Auto-generated Javadoc
/**
* The Class AbstractServerTool.
*
* @author vjrj@ourproject.org (Vicente J. Ruiz Jurado)
*/
public abstract class AbstractServerTool implements ServerTool {
/** The configuration manager. */
protected final ToolConfigurationManager configurationManager;
/** The container manager. */
private final ContainerManager containerManager;
/** The content manager. */
private final ContentManager contentManager;
/** The creation service. */
protected final CreationService creationService;
/** The i18n. */
protected final I18nTranslationService i18n;
/** The name. */
private final String name;
/** The root name. */
private final String rootName;
/** The target. */
private final ServerToolTarget target;
/** The type root. */
private final String typeRoot;
/** The valid container parents. */
private final List<String> validContainerParents;
/** The valid containers. */
private final List<String> validContainers;
/** The valid content parents. */
private final List<String> validContentParents;
/** The valid contents. */
private final List<String> validContents;
/**
* Instantiates a new abstract server tool.
*
* @param name
* the name
* @param rootName
* the root name
* @param typeRoot
* the type root
* @param validContents
* the valid contents
* @param validContentParents
* the valid content parents
* @param validContainers
* the valid containers
* @param validContainerParents
* the valid container parents
* @param contentManager
* the content manager
* @param containerManager
* the container manager
* @param creationService
* the creation service
* @param configurationManager
* the configuration manager
* @param i18n
* the i18n
* @param target
* the target
*/
public AbstractServerTool(final String name, final String rootName, final String typeRoot,
final List<String> validContents, final List<String> validContentParents,
final List<String> validContainers, final List<String> validContainerParents,
final ContentManager contentManager, final ContainerManager containerManager,
final CreationService creationService, final ToolConfigurationManager configurationManager,
final I18nTranslationService i18n, final ServerToolTarget target) {
this.name = name;
this.rootName = rootName;
this.typeRoot = typeRoot;
this.validContents = validContents;
this.validContainers = validContainers;
this.validContentParents = validContentParents;
this.validContainerParents = validContainerParents;
this.contentManager = contentManager;
this.containerManager = containerManager;
this.creationService = creationService;
this.configurationManager = configurationManager;
this.i18n = i18n;
this.target = target;
}
/*
* (non-Javadoc)
*
* @see
* cc.kune.core.server.tool.ServerTool#checkTypesBeforeContainerCreation(java
* .lang.String, java.lang.String)
*/
@Override
public void checkTypesBeforeContainerCreation(final String parentTypeId, final String typeId) {
if (validContainers.contains(typeId) && validContainerParents.contains(parentTypeId)) {
// ok
} else {
throw new ContainerNotPermittedException();
}
}
/*
* (non-Javadoc)
*
* @see
* cc.kune.core.server.tool.ServerTool#checkTypesBeforeContentCreation(java
* .lang.String, java.lang.String)
*/
@Override
public void checkTypesBeforeContentCreation(final String parentTypeId, final String typeId) {
if (validContents.contains(typeId) && validContentParents.contains(parentTypeId)) {
// ok
} else {
throw new ContentNotPermittedException();
}
}
/**
* Creates the initial content.
*
* @param user
* the user
* @param group
* the group
* @param rootFolder
* the root folder
* @param title
* the title
* @param body
* the body
* @param contentType
* the content type
* @return the content
*/
protected Content createInitialContent(final User user, final Group group, final Container rootFolder,
final String title, final String body, final String contentType) {
final Content content = creationService.createContent(title, body, user, rootFolder, contentType);
setContentValues(content, contentType, user);
contentManager.save(content);
return content;
}
/**
* Creates the root.
*
* @param group
* the group
* @return the container
*/
protected Container createRoot(final Group group) {
final ToolConfiguration config = new ToolConfiguration();
final Container rootFolder = creationService.createRootFolder(group, name, rootName, typeRoot);
setContainerAcl(rootFolder);
config.setRoot(rootFolder);
group.setToolConfig(name, config);
configurationManager.persist(config);
return rootFolder;
}
/*
* (non-Javadoc)
*
* @see cc.kune.core.server.tool.ServerTool#getName()
*/
@Override
public String getName() {
return name;
}
/*
* (non-Javadoc)
*
* @see cc.kune.core.server.tool.ServerTool#getRootName()
*/
@Override
public String getRootName() {
return rootName;
}
/*
* (non-Javadoc)
*
* @see cc.kune.core.server.tool.ServerTool#getTarget()
*/
@Override
public ServerToolTarget getTarget() {
return target;
}
/*
* (non-Javadoc)
*
* @see
* cc.kune.core.server.tool.ServerTool#onCreateContainer(cc.kune.domain.Container
* , cc.kune.domain.Container)
*/
@Override
public void onCreateContainer(final Container container, final Container parent) {
}
/*
* (non-Javadoc)
*
* @see
* cc.kune.core.server.tool.ServerTool#onCreateContent(cc.kune.domain.Content,
* cc.kune.domain.Container)
*/
@Override
public void onCreateContent(final Content content, final Container parent) {
}
/*
* (non-Javadoc)
*
* @see cc.kune.core.server.tool.ServerTool#register(cc.kune.core.server.tool.
* ServerToolRegistry)
*/
@Override
@Inject
public void register(final ServerToolRegistry registry) {
registry.register(this);
}
/**
* Sets the access list.
*
* @param container
* the container
* @param acl
* the acl
*/
protected void setAccessList(final Container container, final AccessLists acl) {
containerManager.setAccessList(container, acl);
}
/**
* Sets the container acl.
*
* @param container
* the new container acl
*/
protected void setContainerAcl(final Container container) {
}
/**
* Sets the content values.
*
* @param content
* the content
* @param contentType
* the content type
* @param author
* the author
*/
private void setContentValues(final Content content, final String contentType, final User author) {
content.addAuthor(author);
content.setLanguage(author.getLanguage());
content.setTypeId(contentType);
content.setStatus(ContentStatus.publishedOnline);
content.setPublishedOn(new Date());
}
}