blob: d288925184292078cfe24a99bfc6ea8fa4aebf7b [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 org.apache.falcon.group;
import org.apache.falcon.FalconException;
import org.apache.falcon.entity.FeedHelper;
import org.apache.falcon.entity.common.FeedDataPath;
import org.apache.falcon.entity.v0.Frequency;
import org.apache.falcon.entity.v0.feed.LocationType;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.regex.Matcher;
/**
* Group, which represents a logical group of feeds which can belong to this
* group.
*/
public class FeedGroup {
public FeedGroup(String group, Frequency frequency, String path) {
this.name = group;
this.frequency = frequency;
this.datePattern = getDatePattern(path);
this.feeds = Collections
.newSetFromMap(new ConcurrentHashMap<String, Boolean>());
}
public static String getDatePattern(String path) {
Matcher matcher = FeedDataPath.PATTERN.matcher(path);
List<String> fields = new ArrayList<String>();
while (matcher.find()) {
String var = path.substring(matcher.start(), matcher.end());
fields.add(var);
}
Collections.sort(fields);
return fields.toString();
}
private String name;
private Frequency frequency;
private String datePattern;
private Set<String> feeds;
public Set<String> getFeeds() {
return feeds;
}
@Override
public boolean equals(Object obj) {
if (obj == null || !(obj instanceof FeedGroup)) {
return false;
}
FeedGroup group = (FeedGroup) obj;
return (this.name.equals(group.getName())
&& this.frequency.equals(group.frequency)
&& this.datePattern
.equals(group.datePattern));
}
@Override
public int hashCode() {
return 127 * name.hashCode() + 31 * frequency.hashCode() + datePattern.hashCode();
}
public String getName() {
return name;
}
public Frequency getFrequency() {
return frequency;
}
public String getDatePattern() {
return datePattern;
}
public boolean canContainFeed(org.apache.falcon.entity.v0.feed.Feed feed) throws FalconException {
return this.frequency.equals(feed.getFrequency())
&& this.datePattern.equals(getDatePattern(
FeedHelper.createStorage(feed).getUriTemplate(LocationType.DATA)));
}
}