blob: ac76eb19185ce0059042843eb1690e193bb743be [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package org.apache.lenya.cms.publication;
import org.apache.commons.lang.Validate;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.lenya.ac.Identity;
import org.apache.lenya.cms.observation.RepositoryEvent;
import org.apache.lenya.cms.observation.RepositoryEventFactory;
import org.apache.lenya.cms.repository.RepositoryException;
import org.apache.lenya.cms.repository.SessionHolder;
import org.apache.lenya.transaction.UnitOfWork;
/**
* @deprecated have to solve the concurrency beetween lenya-core-repository/o.a.l.cms.repository.SessionImpl and lenya-publication-impl/o.a.l.cms.publication.SEssionImpl
*/
public class SessionImpl implements Session, SessionHolder {
private static final Log logger = LogFactory.getLog(SessionImpl.class);
private org.apache.lenya.cms.repository.Session repositorySession;
private RepositoryImpl repository;
private DocumentFactory documentFactory;
private DocumentFactoryBuilder documentFactoryBuilder;
public SessionImpl(RepositoryImpl repository,
org.apache.lenya.cms.repository.Session repoSession) {
Validate.notNull(repository, "repository");
Validate.notNull(repoSession, "repository session");
this.repository = repository;
this.repositorySession = repoSession;
this.repositorySession.setHolder(this);
}
public org.apache.lenya.cms.repository.Session getRepositorySession() {
return this.repositorySession;
}
public Publication getPublication(String id) throws ResourceNotFoundException {
try {
return getDocumentFactory().getPublication(id);
} catch (PublicationException e) {
throw new ResourceNotFoundException(e);
}
}
public Repository getRepository() {
return this.repository;
}
protected DocumentFactory getDocumentFactory() {
if (this.documentFactory == null) {
this.documentFactory = this.documentFactoryBuilder.createDocumentFactory(this);
}
return this.documentFactory;
}
public boolean existsPublication(String id) {
return getDocumentFactory().existsPublication(id);
}
public String[] getPublicationIds() {
return getDocumentFactory().getPublicationIds();
}
public Identity getIdentity() {
//return ((IdentityWrapper) getRepositorySession().getIdentity()).getIdentity();
return getRepositorySession().getIdentity();
}
/**
* @return The unit of work.
*/
protected UnitOfWork getUnitOfWork() {
if (repositorySession == null){
throw new RuntimeException("This session [" + getId() + "] is not modifiable!");
}
return repositorySession;
}
public String getId() {
return getRepositorySession().getId();
}
public synchronized void commit() throws RepositoryException {
try {
getRepositorySession().commit();
} catch (Exception e) {
throw new RepositoryException(e);
}
}
public void rollback() throws RepositoryException {
try {
getRepositorySession().rollback();
} catch (Exception e) {
throw new RepositoryException(e);
}
}
/**
* @param identity The identity.
*/
public void setIdentity(Identity identity) {
//florent : now we only use one identity class
//getRepositorySession().setIdentity(new IdentityWrapper(identity));
getRepositorySession().setIdentity(identity);
}
private UriHandler uriHandler;
public UriHandler getUriHandler() {
if (this.uriHandler == null) {
this.uriHandler = new UriHandlerImpl(getDocumentFactory());
}
return this.uriHandler;
}
public void enqueueEvent(Document document, Object descriptor) {
RepositoryEvent event = RepositoryEventFactory.createEvent(document, descriptor);
getRepositorySession().enqueueEvent(event);
}
public boolean isModifiable() {
return getRepositorySession().isModifiable();
}
public void setDocumentFactoryBuilder(DocumentFactoryBuilder documentFactoryBuilder) {
this.documentFactoryBuilder = documentFactoryBuilder;
}
public Publication addPublication(String id) throws RepositoryException {
if (existsPublication(id)) {
throw new RepositoryException("The publication '" + id + "' already exists.");
}
//florent : remove document-impl dependencie
//DocumentFactoryImpl factory = (DocumentFactoryImpl) getDocumentFactory();
DocumentFactory factory = (DocumentFactory) getDocumentFactory();
factory.getPublicationManager().addPublication(id);
return getPublication(id);
}
}