/*******************************************************************************
* Copyright (c) 2010-2012, Mark Czotter, Istvan Rath and Daniel Varro
* 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:
* Mark Czotter - initial API and implementation
*******************************************************************************/
package org.eclipse.incquery.runtime.api;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import org.eclipse.incquery.patternlanguage.patternLanguage.Pattern;
import org.eclipse.incquery.runtime.api.impl.BasePatternGroup;
/**
* Generic implementation of {@link IPatternGroup}, covering an arbitrarily chosen set of patterns. Use the public
* constructor or static GenericPatternGroup.of(...) methods to instantiate.
*
* @author Mark Czotter
*
*/
public class GenericPatternGroup extends BasePatternGroup {
private final Set<Pattern> patterns;
/**
* Creates a GenericPatternGroup object with a set of patterns.
*
* @param patterns
*/
public GenericPatternGroup(Set<Pattern> patterns) {
this.patterns = patterns;
}
@Override
public Set<Pattern> getPatterns() {
return patterns;
}
/**
* Creates a generic {@link IPatternGroup} instance from {@link IMatcherFactory} objects.
*
* @param matcherFactories
* @return
*/
public static IPatternGroup of(Set<IMatcherFactory<?>> matcherFactories) {
return new GenericPatternGroup(patterns(matcherFactories));
}
/**
* Creates a generic {@link IPatternGroup} instance from {@link Pattern} objects.
*
* @param matcherFactories
* @return
*/
public static IPatternGroup of(Pattern... patterns) {
return new GenericPatternGroup(new HashSet<Pattern>(Arrays.asList(patterns)));
}
/**
* Creates a generic {@link IPatternGroup} instance from {@link IMatcherFactory} objects.
*
* @param matcherFactories
* @return
*/
public static IPatternGroup of(IMatcherFactory<?>... matcherFactories) {
return of(new HashSet<IMatcherFactory<?>>(Arrays.asList(matcherFactories)));
}
/**
* Creates a generic {@link IPatternGroup} instance from other {@link IPatternGroup} objects (subgroups).
*
* @param matcherFactories
* @return
*/
public static IPatternGroup of(IPatternGroup... subGroups) {
Set<Pattern> patterns = new HashSet<Pattern>();
for (IPatternGroup group : subGroups) {
patterns.addAll(group.getPatterns());
}
return new GenericPatternGroup(patterns);
}
}