package org.activityinfo.ui.client.page.instance;
import com.google.common.collect.Lists;
import com.google.gwt.safehtml.shared.SafeUri;
import com.google.gwt.safehtml.shared.UriUtils;
import org.activityinfo.model.resource.ResourceId;
import org.activityinfo.ui.client.page.PageId;
import org.activityinfo.ui.client.page.PageState;
import org.activityinfo.ui.client.page.PageStateParser;
import org.activityinfo.ui.client.page.app.Section;
import java.util.List;
/**
* Place corresponding to the view of a instance.
*/
public class InstancePlace implements PageState {
private ResourceId instanceId;
private PageId pageId;
public InstancePlace(ResourceId resourceId, PageId part) {
this.instanceId = resourceId;
this.pageId = part;
}
@Override
public String serializeAsHistoryToken() {
return instanceId.asString();
}
@Override
public PageId getPageId() {
return pageId;
}
public ResourceId getInstanceId() {
return instanceId;
}
@Override
public List<PageId> getEnclosingFrames() {
return Lists.newArrayList(pageId);
}
@Override
public Section getSection() {
return null;
}
public static class Parser implements PageStateParser {
private PageId pageId;
public Parser(PageId pageId) {
this.pageId = pageId;
}
@Override
public InstancePlace parse(String token) {
return new InstancePlace(ResourceId.valueOf(token), pageId);
}
}
public static SafeUri safeUri(ResourceId instanceId) {
return UriUtils.fromTrustedString("#" + historyToken(instanceId));
}
public static SafeUri safeUri(ResourceId id, PageId pageId) {
return UriUtils.fromTrustedString("#" + pageId + "/" + id.asString());
}
public static String historyToken(ResourceId instanceId) {
return "i/" + instanceId.asString();
}
}