blob: 0619e20d5fbf9208f11af111d36519e110f9f6c7 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2003 IBM Corporation and others. All rights reserved.
* This program and the accompanying materials are made available under the
* terms of the Common Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors: IBM Corporation - initial API and implementation
******************************************************************************/
package org.eclipse.ui.internal.contexts;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.eclipse.ui.IMemento;
import org.eclipse.ui.internal.util.Util;
final class Persistence {
final static String PACKAGE_BASE = "contexts"; //$NON-NLS-1$
final static String PACKAGE_FULL = "org.eclipse.ui.contexts"; //$NON-NLS-1$
final static String PACKAGE_PREFIX = "org.eclipse.ui"; //$NON-NLS-1$
final static String TAG_CONTEXT = "context"; //$NON-NLS-1$
final static String TAG_ID = "id"; //$NON-NLS-1$
final static String TAG_NAME = "name"; //$NON-NLS-1$
/**
* Equivalent to <code>TAG_PARENT_ID</code>.
*
* @deprecated This is needed for deprecation support for the "scope"
* elements in the "commands" extension point.
*/
final static String TAG_PARENT = "parent"; //$NON-NLS-1$
final static String TAG_PARENT_ID = "parentId"; //$NON-NLS-1$
/**
* Equivalent to <code>TAG_PARENT_ID</code>.
*
* @deprecated This is needed for deprecation support for
* "acceleratorScopes".
*/
final static String TAG_PARENT_SCOPE = "parentScope"; //$NON-NLS-1$
final static String TAG_SOURCE_ID = "sourceId"; //$NON-NLS-1$
static ContextDefinition readContextDefinition(IMemento memento,
String sourceIdOverride) {
if (memento == null) throw new NullPointerException();
String id = memento.getString(TAG_ID);
String name = memento.getString(TAG_NAME);
String parentId = memento.getString(TAG_PARENT_ID);
String sourceId = sourceIdOverride != null ? sourceIdOverride : memento
.getString(TAG_SOURCE_ID);
/* TODO DEPRECATED Support for the old "commands" extension point way
* of specifying parents, and for the old "acceleratorScopes" extension
* point way of specifying parents.
*/
if (parentId == null) {
// "acceleratorScopes" support
parentId = memento.getString(TAG_PARENT_SCOPE);
}
if (parentId == null) {
// "commands" support
parentId = memento.getString(TAG_PARENT);
}
// TODO DEPRECATED END
return new ContextDefinition(id, name, parentId, sourceId);
}
static List readContextDefinitions(IMemento memento, String name,
String sourceIdOverride) {
if (memento == null || name == null) throw new NullPointerException();
IMemento[] mementos = memento.getChildren(name);
if (mementos == null) throw new NullPointerException();
List list = new ArrayList(mementos.length);
for (int i = 0; i < mementos.length; i++)
list.add(readContextDefinition(mementos[i], sourceIdOverride));
return list;
}
static void writeContextDefinition(IMemento memento,
ContextDefinition contextDefinition) {
if (memento == null || contextDefinition == null)
throw new NullPointerException();
memento.putString(TAG_ID, contextDefinition.getId());
memento.putString(TAG_NAME, contextDefinition.getName());
memento.putString(TAG_PARENT_ID, contextDefinition.getParentId());
memento.putString(TAG_SOURCE_ID, contextDefinition.getSourceId());
}
static void writeContextDefinitions(IMemento memento, String name,
List contextDefinitions) {
if (memento == null || name == null || contextDefinitions == null)
throw new NullPointerException();
contextDefinitions = new ArrayList(contextDefinitions);
Iterator iterator = contextDefinitions.iterator();
while (iterator.hasNext())
Util.assertInstance(iterator.next(), ContextDefinition.class);
iterator = contextDefinitions.iterator();
while (iterator.hasNext())
writeContextDefinition(memento.createChild(name),
(ContextDefinition) iterator.next());
}
/**
* Constructs a new instance of <code>Persistence</code>. This class
* should never be instantiated.
*/
private Persistence() {
// This class should not be instantiated.
}
}