1 /*******************************************************************************
\r
2 * Copyright (c) 2007, 2011 Association for Decentralized Information Management in
\r
4 * All rights reserved. This program and the accompanying materials
\r
5 * are made available under the terms of the Eclipse Public License v1.0
\r
6 * which accompanies this distribution, and is available at
\r
7 * http://www.eclipse.org/legal/epl-v10.html
\r
10 * VTT Technical Research Centre of Finland - initial API and implementation
\r
11 *******************************************************************************/
\r
12 package org.simantics.db.layer0.variable;
\r
14 import java.util.ArrayList;
\r
15 import java.util.List;
\r
17 import org.simantics.databoard.binding.Binding;
\r
18 import org.simantics.db.Resource;
\r
19 import org.simantics.db.layer0.variable.RVI.RVIPart;
\r
20 import org.simantics.db.layer0.variable.Variables.Role;
\r
23 * Utility for building RVI parts.
\r
25 * @author toni.kalajainen
\r
27 public class RVIBuilder {
\r
30 List<RVIPart> parts;
\r
32 public RVIBuilder(Binding rviBinding)
\r
34 parts = new ArrayList<RVIPart>();
\r
37 public RVIBuilder(RVI rvi)
\r
42 public RVIBuilder set( RVI rvi )
\r
44 this.rviBinding = rvi.getBinding();
\r
45 parts = new ArrayList<RVIPart>( rvi.parts.length + 10 );
\r
46 for ( RVIPart part : rvi.parts ) parts.add( part );
\r
50 public RVIBuilder append( RVI rvi )
\r
52 for ( RVIPart part : rvi.parts ) parts.add( part );
\r
56 public RVIBuilder append( RVIPart part )
\r
62 public RVIBuilder append( Role role, String string )
\r
64 parts.add( new RVI.StringRVIPart(role, string) );
\r
68 public RVIBuilder append( Role role, Resource resource )
\r
70 parts.add( new RVI.ResourceRVIPart(role, resource) );
\r
74 public RVIBuilder append( Role role, Resource resource, long mostSignificant, long leastSignificant)
\r
76 parts.add( new RVI.GuidRVIPart(role, resource, mostSignificant, leastSignificant) );
\r
81 * @param rvi the RVI to truncate
\r
82 * @param n number of parts to remove from the end of the RVI
\r
83 * @return truncated RVI
\r
85 public RVIBuilder removeLast(int n) {
\r
86 if (n > parts.size())
\r
87 throw new IllegalArgumentException("Requested to remove " + n + " parts from RVI, only " + parts.size()
\r
88 + " parts exist in '" + parts + "'");
\r
89 parts = parts.subList(0, parts.size() - n);
\r
93 public RVIBuilder removeFromFirstRole(Role role) {
\r
94 for (int i = 0; i < parts.size(); ++i) {
\r
95 if (parts.get(i).getRole() == role) {
\r
96 parts = parts.subList(0, i);
\r
105 if (parts.isEmpty())
\r
106 return RVI.empty( rviBinding );
\r
107 RVI rvi = new RVI( rviBinding );
\r
108 rvi.parts = (RVIPart[]) parts.toArray( new RVIPart[ parts.size() ] );
\r