/*
* 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.exoplatform.services.jcr.impl.core.query;
import org.exoplatform.services.jcr.datamodel.NodeData;
import org.exoplatform.services.jcr.datamodel.QPath;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.HashMap;
import java.util.Map;
import javax.jcr.ItemNotFoundException;
import javax.jcr.RepositoryException;
/**
* <code>OnWorkspaceInconsistency</code> defines an interface to handle
* workspace inconsistencies.
*/
public abstract class OnWorkspaceInconsistency
{
/**
* Logger instance for this class.
*/
private static final Logger log = LoggerFactory.getLogger("exo.jcr.component.core.OnWorkspaceInconsistency");
/**
* An handler that simply logs the path of the parent node and the name
* of the missing child node and then re-throws the exception.
*/
public static final OnWorkspaceInconsistency FAIL = new OnWorkspaceInconsistency("fail")
{
public void handleMissingChildNode(ItemNotFoundException exception, QueryHandler handler, QPath path,
NodeData node, NodeData child) throws RepositoryException
{
//NamePathResolver resolver = new DefaultNamePathResolver(handler.getContext().getNamespaceRegistry());
log.error("TO DO ");
// log.error("Node {} ({}) has missing child '{}' ({})", new Object[]{resolver.getJCRPath(path),
// node.getNodeId().getUUID().toString(), resolver.getJCRName(child.getName()),
// child.getId().getUUID().toString()});
throw exception;
}
};
protected static final Map<String, OnWorkspaceInconsistency> INSTANCES =
new HashMap<String, OnWorkspaceInconsistency>();
static
{
INSTANCES.put(FAIL.name, FAIL);
}
/**
* The name of the {@link OnWorkspaceInconsistency} handler.
*/
private final String name;
/**
* Protected constructor.
*/
protected OnWorkspaceInconsistency(String name)
{
this.name = name;
}
/**
* @return the name of this {@link OnWorkspaceInconsistency}.
*/
public String getName()
{
return name;
}
/**
* Returns the {@link OnWorkspaceInconsistency} with the given
* <code>name</code>.
*
* @param name the name of a {@link OnWorkspaceInconsistency}.
* @return the {@link OnWorkspaceInconsistency} with the given
* <code>name</code>.
* @throws IllegalArgumentException if <code>name</code> is not a well-known
* {@link OnWorkspaceInconsistency} name.
*/
public static OnWorkspaceInconsistency fromString(String name) throws IllegalArgumentException
{
OnWorkspaceInconsistency handler = INSTANCES.get(name.toLowerCase());
if (handler == null)
{
throw new IllegalArgumentException("Unknown name: " + name);
}
else
{
return handler;
}
}
/**
* Handle a missing child node state.
*
* @param exception the exception that was thrown when the query handler
* tried to load the child node state.
* @param handler the query handler.
* @param path the path of the parent node.
* @param node the parent node state.
* @param child the child node entry, for which no node state could be
* found.
* @throws RepositoryException if another error occurs not related to item
* state reading.
*/
public abstract void handleMissingChildNode(ItemNotFoundException exception, QueryHandler handler, QPath path,
NodeData node, NodeData child) throws RepositoryException;
}