package architect; import android.os.Parcel; import android.os.Parcelable; import java.util.HashMap; import java.util.Map; /** * Stack scope names policy * Tracks and provides unique names for stack scopes * * @author Lukasz Piliszczuk - lukasz.pili@gmail.com */ public class ScopeNamer implements Parcelable { private final Map<String, Integer> ids; public ScopeNamer() { ids = new HashMap<>(); } private ScopeNamer(Parcel parcel) { ids = (HashMap<String, Integer>) parcel.readSerializable(); } public String getName(Object scope) { String name = scope.getClass().getName(); int id; if (ids.containsKey(name)) { id = ids.get(name); } else { id = 0; } ids.put(name, ++id); return String.format("ARCHITECT_SCOPE_%s_%d", name, id); } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel parcel, int i) { parcel.writeSerializable((HashMap<String, Integer>) ids); } public static final Parcelable.Creator<ScopeNamer> CREATOR = new Parcelable.Creator<ScopeNamer>() { @Override public ScopeNamer createFromParcel(Parcel source) { return new ScopeNamer(source); } @Override public ScopeNamer[] newArray(int size) { return new ScopeNamer[size]; } }; }