blob: f91e8b12c0af75de43c6ccfa2f4443ca847a8b0c [file] [log] [blame]
/*
* Copyright (c) 2011, 2012 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:
* Martin Fluegge - initial API and implementation
*/
package org.eclipse.emf.cdo.dawn.notifications;
import org.eclipse.emf.cdo.CDOObject;
import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.lock.CDOLockState;
import org.eclipse.emf.cdo.common.revision.CDOIDAndBranch;
import org.eclipse.emf.cdo.dawn.editors.IDawnEditor;
import org.eclipse.emf.cdo.dawn.editors.IDawnEditorSupport;
import org.eclipse.emf.cdo.dawn.spi.DawnState;
import org.eclipse.emf.cdo.view.CDOView;
import org.eclipse.emf.cdo.view.CDOViewLocksChangedEvent;
import java.util.HashMap;
import java.util.Map;
/**
* @author Martin Fluegge
* @since 2.0
*/
public class BasicDawnLockingHandler extends BasicDawnListener
{
public BasicDawnLockingHandler(IDawnEditor editor)
{
super(editor);
}
@Override
public void handleLocksChangedEvent(CDOViewLocksChangedEvent event)
{
CDOViewLocksChangedEvent lockEvent = event;
CDOLockState[] lockStates = lockEvent.getLockStates();
Map<Object, DawnState> changedObjects = new HashMap<Object, DawnState>();
for (CDOLockState state : lockStates)
{
Object lockedObject = state.getLockedObject();
CDOView view = editor.getDawnEditorSupport().getView();
CDOID id;
if (lockedObject instanceof CDOID)
{
id = (CDOID)lockedObject;
}
else if (lockedObject instanceof CDOIDAndBranch)
{
id = ((CDOIDAndBranch)lockedObject).getID();
}
else
{
throw new RuntimeException("Unexpected object type: " + lockedObject);
}
if (id != null)
{
CDOObject object = view.getObject(id);
if (object.cdoWriteLock().isLockedByOthers())
{
changedObjects.put(object, DawnState.LOCKED_REMOTELY);
}
else
{
changedObjects.put(object, DawnState.CLEAN);
}
}
}
IDawnEditorSupport dawnEditorSupport = editor.getDawnEditorSupport();
dawnEditorSupport.handleRemoteLockChanges(changedObjects);
}
}