/** * 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))); } }