/* * Copyright (C) 2003-2009 eXo Platform SAS. * * 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see<http://www.gnu.org/licenses/>. */ package org.exoplatform.wiki.mow.core.api.wiki; import java.util.List; import org.chromattic.api.UndeclaredRepositoryException; import org.chromattic.api.annotations.Create; import org.chromattic.api.annotations.MappedBy; import org.chromattic.api.annotations.Name; import org.chromattic.api.annotations.OneToOne; import org.chromattic.api.annotations.Owner; import org.chromattic.api.annotations.Path; import org.chromattic.api.annotations.Property; import org.exoplatform.wiki.mow.api.Wiki; import org.exoplatform.wiki.mow.api.WikiNodeType; import org.exoplatform.wiki.mow.api.WikiType; import org.exoplatform.wiki.service.WikiService; /** * @author <a href="mailto:patrice.lamarque@exoplatform.com">Patrice * Lamarque</a> * @version $Revision$ */ public abstract class WikiImpl implements Wiki { @Create public abstract PageImpl createWikiPage(); public abstract WikiType getWikiType(); private WikiService wService; public WikiService getWikiService() { return this.wService; } public void setWikiService(WikiService wService) { this.wService = wService; } public void initTemplate() { String path = getPreferences().getPath(); wService.initDefaultTemplatePage(path); } public WikiHome getWikiHome() { WikiHome home = getHome(); if (home == null) { home = createWikiHome(); setHome(home); home.makeVersionable(); home.setOwner(getOwner()); AttachmentImpl content = home.getContent(); home.setTitle(WikiNodeType.Definition.WIKI_HOME_TITLE); home.setSyntax(home.getWikiService().getDefaultWikiSyntaxId()); StringBuilder sb = new StringBuilder("{tip}\nWelcome to Wiki Home of "); sb.append(getOwner()).append(" "); if (WikiType.PORTAL.equals(getWikiType())) { sb.append("portal"); } else if (WikiType.GROUP.equals(getWikiType())) { sb.append("group"); } sb.append(".").append("\n* See *[Sandbox space|group:sandbox.WikiHome]* for an example wiki with sample content.\n{tip}"); content.setText(sb.toString()); try { home.setNonePermission(); home.checkin(); home.checkout(); } catch (Exception e) { throw new UndeclaredRepositoryException("Can't create new version for WikiHome"); } } return home; } public LinkRegistry getLinkRegistry() { LinkRegistry linkRegistry = getLinkRegistryByChromattic(); if (linkRegistry == null) { linkRegistry = createLinkRegistry(); setLinkRegistryByChromattic(linkRegistry); } return linkRegistry; } public Trash getTrash() { Trash trash = getTrashByChromattic(); if (trash == null) { trash = createTrash(); setTrashByChromattic(trash); } return trash; } public Preferences getPreferences() { Preferences preferences = getPreferencesByChromattic(); if (preferences == null) { preferences = createPreferences(); setPreferencesByChromattic(preferences); } return preferences; } @Name public abstract String getName(); @Property(name = WikiNodeType.Definition.OWNER) public abstract String getOwner(); public abstract void setOwner(String wikiOwner); @Path public abstract String getPath(); @Property(name = WikiNodeType.Definition.WIKI_PERMISSIONS) public abstract List<String> getWikiPermissions(); public abstract void setWikiPermissions(List<String> permissions); @Property(name = WikiNodeType.Definition.DEFAULT_PERMISSIONS_INITED) public abstract boolean getDefaultPermissionsInited(); public abstract void setDefaultPermissionsInited(boolean isInited); public PageImpl getPageByID(String id) { throw new UnsupportedOperationException(); } public PageImpl getPageByURI(String uri) { throw new UnsupportedOperationException(); } public abstract String getType(); @OneToOne @Owner @MappedBy(WikiNodeType.Definition.WIKI_HOME_NAME) protected abstract WikiHome getHome(); protected abstract void setHome(WikiHome homePage); @Create protected abstract WikiHome createWikiHome(); @OneToOne @Owner @MappedBy(WikiNodeType.Definition.LINK_REGISTRY) protected abstract LinkRegistry getLinkRegistryByChromattic(); protected abstract void setLinkRegistryByChromattic(LinkRegistry linkRegistry); @Create protected abstract LinkRegistry createLinkRegistry(); @OneToOne @Owner @MappedBy(WikiNodeType.Definition.TRASH_NAME) protected abstract Trash getTrashByChromattic(); protected abstract void setTrashByChromattic(Trash trash); @Create protected abstract Trash createTrash(); @OneToOne @Owner @MappedBy(WikiNodeType.Definition.PREFERENCES) protected abstract Preferences getPreferencesByChromattic(); protected abstract void setPreferencesByChromattic(Preferences preferences); @Create protected abstract Preferences createPreferences(); }