/* * 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; import javax.jcr.Node; import javax.jcr.PathNotFoundException; import javax.jcr.RepositoryException; import org.chromattic.api.ChromatticSession; import org.chromattic.api.UndeclaredRepositoryException; import org.exoplatform.wiki.mow.api.Model; import org.exoplatform.wiki.mow.api.WikiNodeType; import org.exoplatform.wiki.mow.api.WikiStore; /** * @author <a href="mailto:patrice.lamarque@exoplatform.com">Patrice * Lamarque</a> * @version $Revision$ */ public class ModelImpl implements Model { /** . */ private final ChromatticSession session; /** . */ private WikiStoreImpl store; public ModelImpl(ChromatticSession chromeSession) { this.session = chromeSession; } public WikiStore getWikiStore() { if (store == null) { store = session.findByPath(WikiStoreImpl.class, "exo:applications" + "/" + WikiNodeType.Definition.WIKI_APPLICATION + "/" + WikiNodeType.Definition.WIKI_STORE_NAME); if (store == null) { try { Node rootNode = session.getJCRSession().getRootNode(); Node publicApplicationNode = rootNode.getNode("exo:applications"); Node eXoWiki = null; try { eXoWiki = publicApplicationNode.getNode(WikiNodeType.Definition.WIKI_APPLICATION); } catch (PathNotFoundException e) { eXoWiki = publicApplicationNode.addNode(WikiNodeType.Definition.WIKI_APPLICATION); publicApplicationNode.save(); } Node wikiMetadata = eXoWiki.addNode(WikiNodeType.Definition.WIKI_STORE_NAME, WikiNodeType.WIKI_STORE); Node wikis = eXoWiki.addNode("wikis"); save(); store = session.findByNode(WikiStoreImpl.class, wikiMetadata); } catch (RepositoryException e) { throw new UndeclaredRepositoryException(e); } } } store.setSession(session); return store; } public void save() { session.save(); } public void close() { session.close(); } }