/************************************************************************
* Copyright (c) 2015 IoT-Solutions e.U.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
************************************************************************/
package iot.jcypher.domainquery.ast;
import java.util.ArrayList;
import java.util.List;
import iot.jcypher.domainquery.api.APIAccess;
import iot.jcypher.domainquery.api.DomainObjectMatch;
public class UnionExpression implements IASTObject {
private DomainObjectMatch<?> result;
private List<DomainObjectMatch<?>> sources;
private boolean union;
// the last expression which defines the basic union
private IASTObject lastOfUnionBase;
public UnionExpression(boolean union) {
super();
this.union = union;
this.sources = new ArrayList<DomainObjectMatch<?>>();
}
public DomainObjectMatch<?> getResult() {
return result;
}
public void setResult(DomainObjectMatch<?> result) {
this.result = result;
}
public List<DomainObjectMatch<?>> getSources() {
return sources;
}
public DomainObjectMatch<?> getCommonTraversalSource() {
DomainObjectMatch<?> travSource = null;
int idx = 0;
for (DomainObjectMatch<?> dom : this.sources) {
DomainObjectMatch<?> ts = APIAccess.getTraversalSource(dom);
if (idx == 0) {
travSource = ts;
} else {
if (ts != travSource)
travSource = null;
}
}
return travSource;
}
public boolean isUnion() {
return union;
}
public IASTObject getLastOfUnionBase() {
return lastOfUnionBase;
}
public void setLastOfUnionBase(IASTObject lastOfUnionBase) {
this.lastOfUnionBase = lastOfUnionBase;
}
public boolean isLastOfSources(DomainObjectMatch<?> dom) {
int sz = this.sources.size();
return sz > 0 && dom.equals(this.sources.get(sz - 1));
}
}