/**
*
* Funf: Open Sensing Framework
* Copyright (C) 2010-2011 Nadav Aharony, Wei Pan, Alex Pentland.
* Acknowledgments: Alan Gardner
* Contact: nadav@media.mit.edu
*
* This file is part of Funf.
*
* Funf is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation, either version 3 of
* the License, or (at your option) any later version.
*
* Funf is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with Funf. If not, see <http://www.gnu.org/licenses/>.
*
*/
package edu.mit.media.funf.util;
import java.util.Date;
import android.content.Context;
import edu.mit.media.funf.time.TimeUtil;
public interface NameGenerator {
/**
* Generate a name using the name that was passed in.
* @param name
* @return
*/
public String generateName(final String name);
public static class IdentityNameGenerator implements NameGenerator {
@Override
public String generateName(final String name) {
return name;
}
}
public static class TimestampNameGenerator implements NameGenerator {
@Override
public String generateName(final String name) {
return name == null ? null : TimeUtil.getTimestamp() + "_" + name;
}
}
public static class DatetimeNameGenerator implements NameGenerator {
@Override
public String generateName(final String name) {
String datetime = java.text.DateFormat.getDateTimeInstance().format(new Date());
return name == null ? null : datetime + "_" + name;
}
}
public static class ConstantNameGenerator implements NameGenerator {
private final String prefix, suffix;
public ConstantNameGenerator(String prefix, String suffix) {
this.prefix = prefix;
this.suffix = suffix;
}
@Override
public String generateName(final String name) {
return name == null ? null : prefix + name + suffix;
}
}
/**
* Applies the name generators in the order they were passed in.
*
*/
public static class CompositeNameGenerator implements NameGenerator {
private final NameGenerator[] nameGenerators;
public CompositeNameGenerator(NameGenerator... nameGenerators) {
assert nameGenerators != null;
this.nameGenerators = new NameGenerator[nameGenerators.length];
System.arraycopy(nameGenerators, 0, this.nameGenerators, 0, nameGenerators.length);
}
@Override
public String generateName(final String name) {
if (name == null) {
return null;
}
String transformedName = name;
for (NameGenerator nameGenerator : nameGenerators) {
transformedName = nameGenerator.generateName(transformedName);
}
return transformedName;
}
}
public static class SystemUniqueTimestampNameGenerator implements NameGenerator {
private final NameGenerator delegate;
public SystemUniqueTimestampNameGenerator(Context context) {
delegate = new CompositeNameGenerator(new TimestampNameGenerator(), new ConstantNameGenerator(UuidUtil.getInstallationId(context) + "_", ""));
}
@Override
public String generateName(String name) {
return delegate.generateName(name);
}
}
public static class RequiredSuffixNameGenerator implements NameGenerator {
private final String requiredSuffix;
public RequiredSuffixNameGenerator(String requiredSuffix) {
this.requiredSuffix = requiredSuffix;
}
@Override
public String generateName(String name) {
if (name != null && !name.toLowerCase().endsWith(requiredSuffix)) {
name = name + requiredSuffix;
}
return name;
}
}
}