/*
*
* 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.manager.impl;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import cc.kune.common.shared.utils.TextUtils;
import cc.kune.core.server.manager.TagManager;
import cc.kune.core.server.manager.TagUserContentManager;
import cc.kune.core.server.persist.DataSourceKune;
import cc.kune.core.shared.domain.TagCloudResult;
import cc.kune.core.shared.domain.TagCount;
import cc.kune.domain.Content;
import cc.kune.domain.Group;
import cc.kune.domain.Tag;
import cc.kune.domain.TagUserContent;
import cc.kune.domain.User;
import cc.kune.domain.finders.TagUserContentFinder;
import com.google.inject.Inject;
import com.google.inject.Provider;
import com.google.inject.Singleton;
// TODO: Auto-generated Javadoc
/**
* The Class TagUserContentManagerDefault.
*
* @author vjrj@ourproject.org (Vicente J. Ruiz Jurado)
*/
@Singleton
public class TagUserContentManagerDefault extends DefaultManager<TagUserContent, Long> implements
TagUserContentManager {
/** The finder. */
private final TagUserContentFinder finder;
/** The provider. */
private final Provider<EntityManager> provider;
/** The tag manager. */
private final TagManager tagManager;
/**
* Instantiates a new tag user content manager default.
*
* @param provider
* the provider
* @param tagManager
* the tag manager
* @param finder
* the finder
*/
@Inject
public TagUserContentManagerDefault(@DataSourceKune final Provider<EntityManager> provider,
final TagManager tagManager, final TagUserContentFinder finder) {
super(provider, TagUserContent.class);
this.provider = provider;
this.tagManager = tagManager;
this.finder = finder;
}
/**
* Find.
*
* @param user
* the user
* @param content
* the content
* @return the list
*/
public List<Tag> find(final User user, final Content content) {
return finder.findTags(user, content);
}
/**
* Gets the max count.
*
* @param group
* the group
* @return the max count
*/
private int getMaxCount(final Group group) {
return finder.getMaxGrouped(group).intValue();
}
/**
* Gets the min count.
*
* @param group
* the group
* @return the min count
*/
private int getMinCount(final Group group) {
return finder.getMinGrouped(group).intValue();
}
/**
* Gets the summary by group.
*
* @param group
* the group
* @return the summary by group
*/
private List<TagCount> getSummaryByGroup(final Group group) {
return finder.getTagsGroups(group);
}
/*
* (non-Javadoc)
*
* @see
* cc.kune.core.server.manager.TagUserContentManager#getTagCloudResultByGroup
* (cc.kune.domain.Group)
*/
@Override
public TagCloudResult getTagCloudResultByGroup(final Group group) {
try {
return new TagCloudResult(getSummaryByGroup(group), getMaxCount(group), getMinCount(group));
} catch (final NoResultException e) {
return new TagCloudResult();
}
}
/*
* (non-Javadoc)
*
* @see
* cc.kune.core.server.manager.TagUserContentManager#getTagsAsString(cc.kune
* .domain.User, cc.kune.domain.Content)
*/
@Override
public String getTagsAsString(final User user, final Content content) {
final StringBuffer tagConcatenated = new StringBuffer();
if (user.getId() != null) {
// FIXME: User must be persisted (this fails on tests)
final List<Tag> tags = find(user, content);
for (final Tag tag : tags) {
tagConcatenated.append(" ").append(tag.getName());
}
}
return tagConcatenated.toString().replaceFirst(" ", "");
}
/*
* (non-Javadoc)
*
* @see
* cc.kune.core.server.manager.TagUserContentManager#remove(cc.kune.domain
* .User, cc.kune.domain.Content)
*/
@Override
public void remove(final User user, final Content content) {
for (final TagUserContent item : finder.find(user, content)) {
provider.get().remove(item);
}
}
/*
* (non-Javadoc)
*
* @see
* cc.kune.core.server.manager.TagUserContentManager#setTags(cc.kune.domain
* .User, cc.kune.domain.Content, java.lang.String)
*/
@Override
public void setTags(final User user, final Content content, final String tags) {
final ArrayList<String> tagsStripped = TextUtils.splitTags(tags);
final ArrayList<Tag> tagList = new ArrayList<Tag>();
for (final String tagString : tagsStripped) {
Tag tag;
try {
tag = tagManager.findByTagName(tagString);
} catch (final NoResultException e) {
tag = new Tag(tagString);
tagManager.persist(tag);
}
if (!tagList.contains(tag)) {
tagList.add(tag);
}
}
remove(user, content);
for (final Tag tag : tagList) {
final TagUserContent tagUserContent = new TagUserContent(tag, user, content);
persist(tagUserContent);
}
}
}