blob: ffbbb81a2c55d9c5df538e35c224b77a84062d64 [file] [log] [blame]
/*
* Copyright (c) 2015 Eike Stepper (Berlin, Germany) 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:
* Eike Stepper - initial API and implementation
*/
package org.eclipse.emf.cdo.internal.explorer.checkouts;
import org.eclipse.emf.cdo.common.id.CDOID.ObjectType;
import org.eclipse.emf.cdo.explorer.checkouts.CDOCheckout;
import org.eclipse.emf.cdo.explorer.checkouts.CDOCheckoutManager;
import org.eclipse.emf.cdo.internal.explorer.AbstractManager;
import org.eclipse.emf.cdo.view.CDOView;
import org.eclipse.net4j.util.event.Event;
import java.io.File;
import java.util.Arrays;
import java.util.Map;
import java.util.Properties;
import java.util.concurrent.ConcurrentHashMap;
/**
* @author Eike Stepper
*/
public class CDOCheckoutManagerImpl extends AbstractManager<CDOCheckout>implements CDOCheckoutManager
{
private static final String PROPERTIES_FILE = "checkout.properties";
private final Map<CDOView, CDOCheckout> viewMap = new ConcurrentHashMap<CDOView, CDOCheckout>();
public CDOCheckoutManagerImpl(File folder)
{
super(CDOCheckout.class, folder);
}
@Override
public String getPropertiesFileName()
{
return PROPERTIES_FILE;
}
public CDOCheckout getCheckout(String id)
{
return getElement(id);
}
public CDOCheckout getCheckout(CDOView view)
{
return viewMap.get(view);
}
public CDOCheckout getCheckoutByLabel(String label)
{
return getElementByLabel(label);
}
public CDOCheckout[] getCheckouts()
{
return getElements();
}
public CDOCheckout addCheckout(Properties properties)
{
return newElement(properties);
}
public void fireCheckoutOpenEvent(CDOCheckout checkout, CDOView view, CDOCheckout.State oldState,
CDOCheckout.State newState)
{
switch (newState)
{
case Open:
viewMap.put(view, checkout);
break;
case Closed:
viewMap.remove(view);
break;
}
fireEvent(new CheckoutStateEventImpl(this, checkout, oldState, newState));
}
@Override
protected CDOCheckout createElement(String type)
{
if (CDOCheckout.TYPE_ONLINE_TRANSACTIONAL.equals(type))
{
return new OnlineCDOCheckout();
}
if (CDOCheckout.TYPE_ONLINE_HISTORICAL.equals(type))
{
return new OnlineCDOCheckout(true);
}
if (CDOCheckout.TYPE_OFFLINE.equals(type))
{
return new OfflineCDOCheckout();
}
throw new IllegalArgumentException("Unknown type: " + type);
}
@Override
protected CDOCheckout[] sortElements(CDOCheckout[] array)
{
CDOCheckout[] sorted = super.sortElements(array);
Arrays.sort(sorted);
return sorted;
}
@Override
protected void doDeactivate() throws Exception
{
for (CDOCheckout checkout : getCheckouts())
{
checkout.close();
}
super.doDeactivate();
}
static
{
// Make sure all object types are registered.
ObjectType.values();
}
/**
* @author Eike Stepper
*/
private static final class CheckoutStateEventImpl extends Event implements CheckoutStateEvent
{
private static final long serialVersionUID = 1L;
private final CDOCheckout checkout;
private final CDOCheckout.State oldState;
private final CDOCheckout.State newState;
public CheckoutStateEventImpl(CDOCheckoutManager repositoryManager, CDOCheckout checkout,
CDOCheckout.State oldState, CDOCheckout.State newState)
{
super(repositoryManager);
this.checkout = checkout;
this.oldState = oldState;
this.newState = newState;
}
@Override
public CDOCheckoutManager getSource()
{
return (CDOCheckoutManager)super.getSource();
}
public CDOCheckout getCheckout()
{
return checkout;
}
public CDOCheckout.State getOldState()
{
return oldState;
}
public CDOCheckout.State getNewState()
{
return newState;
}
@Override
public String toString()
{
return "CDOCheckoutState[" + checkout + ", " + oldState + " --> " + newState + "]";
}
}
}