1 /*******************************************************************************
2 * Copyright (c) 2007, 2010 Association for Decentralized Information Management
4 * All rights reserved. This program and the accompanying materials
5 * are made available under the terms of the Eclipse Public License v1.0
6 * which accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
10 * VTT Technical Research Centre of Finland - initial API and implementation
11 *******************************************************************************/
12 package org.simantics.layer0.utils.property.providers;
14 import java.util.Collection;
15 import java.util.HashMap;
18 import org.simantics.db.ReadGraph;
19 import org.simantics.db.Resource;
20 import org.simantics.db.WriteGraph;
21 import org.simantics.db.exception.DatabaseException;
24 public class CombinedPropertyProvider implements IPropertyProvider {
26 private Map<Resource[], IPropertyProvider> providerMap = new HashMap<Resource[], IPropertyProvider>();
28 public void addProvider(ReadGraph graph, IPropertyProvider provider) {
29 for (Resource[] key : provider.provides(graph))
30 providerMap.put(key, provider);
34 public Object get(ReadGraph graph, final Resource resource, Resource... relations) throws DatabaseException {
35 IPropertyProvider provider = providerMap.get(relations);
38 return provider.get(graph, resource, relations);
42 public Collection<Resource[]> provides(ReadGraph graph) {
43 return providerMap.keySet();
47 public void set(WriteGraph graph, Object value, Resource resource, Resource... relations) throws DatabaseException {
48 IPropertyProvider provider = providerMap.get(relations);
50 throw new DoesNotHaveProperty();
51 provider.set(graph, value, resource, relations);