blob: 70f5d3f510efd1cb0405e76f3c2ef3555518bc03 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2001, 2008 Oracle Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Oracle Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jst.jsf.designtime.internal.view.model.jsp.registry;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jst.jsp.core.taglib.ITaglibRecord;
class LibraryOperationFactory
{
private final TLDTagRegistry _tagRegistry;
public LibraryOperationFactory(final TLDTagRegistry tagRegistry)
{
_tagRegistry = tagRegistry;
}
LibraryOperation createAddOperation(final ITaglibRecord changeRecord)
{
return new AddTagLibrary(_tagRegistry, changeRecord);
}
LibraryOperation createRemoveOperation(final ITaglibRecord changeRecord)
{
return new RemoveTagLibrary(_tagRegistry, changeRecord);
}
LibraryOperation createChangeOperation(final ITaglibRecord changeRecord)
{
if (changeRecord == null)
{
throw new IllegalArgumentException();
}
return new ChangeTagLibrary(_tagRegistry, changeRecord);
}
private static class AddTagLibrary extends LibraryOperation
{
private final TLDTagRegistry _tagRegistry;
public AddTagLibrary(final TLDTagRegistry tagRegistry,
final ITaglibRecord newRecord)
{
super(newRecord);
_tagRegistry = tagRegistry;
}
@Override
protected IStatus doRun()
{
synchronized (_tagRegistry)
{
// fire change event if applicable
_tagRegistry.initialize(_changeRecord, true);
return Status.OK_STATUS;
}
}
}
private static class RemoveTagLibrary extends LibraryOperation
{
private final TLDTagRegistry _tagRegistry;
protected RemoveTagLibrary(final TLDTagRegistry tagRegistry,
final ITaglibRecord changeRecord)
{
super(changeRecord);
_tagRegistry = tagRegistry;
}
@Override
protected IStatus doRun()
{
_tagRegistry.remove(_changeRecord);
return Status.OK_STATUS;
}
}
private static class ChangeTagLibrary extends LibraryOperation
{
private final TLDTagRegistry _tagRegistry;
protected ChangeTagLibrary(final TLDTagRegistry tagRegistry,
final ITaglibRecord changeRecord)
{
super(changeRecord);
_tagRegistry = tagRegistry;
}
@Override
protected IStatus doRun()
{
IStatus result = null;
synchronized (_tagRegistry)
{
result = new RemoveTagLibrary(_tagRegistry, _changeRecord).doRun();
if (result.getSeverity() != IStatus.ERROR
&& result.getSeverity() != IStatus.CANCEL)
{
result = new AddTagLibrary(_tagRegistry, _changeRecord)
.doRun();
}
}
return result;
}
}
}