}
public interface TranslationWorkspaceManager
{
<<<<<<< HEAD
public static final String EVENT_WORKSPACE_CREATED = "webtrans.WorkspaceCreated";
private Log log = Logging.getLog(TranslationWorkspaceManager.class);
private final ConcurrentHashMap workspaceMap;
private final Multimap projectIterationLocaleMap;
private final Multimap localeWorkspaceMap;
public TranslationWorkspaceManager()
{
this.workspaceMap = new ConcurrentHashMap();
Multimap projectIterationLocaleMap = HashMultimap.create();
this.projectIterationLocaleMap = Multimaps.synchronizedMultimap(projectIterationLocaleMap);
Multimap localeWorkspaceMap = HashMultimap.create();
this.localeWorkspaceMap = Multimaps.synchronizedMultimap(localeWorkspaceMap);
}
@Observer(ZanataInit.EVENT_Zanata_Startup)
public void start()
{
log.info("starting...");
@Observer(ZanataIdentity.USER_LOGOUT_EVENT)
public void exitWorkspace(String username)
{
log.info("User logout: Removing {0} from all workspaces", username);
ImmutableSet workspaceSet = ImmutableSet.copyOf(workspaceMap.values());
for (TranslationWorkspace workspace : workspaceSet)
{
if (workspace.removeTranslator(new PersonId(username)))
{
log.info("Removing user {0} from workspace {1}", username, workspace.getWorkspaceContext());
// Send GWT Event to client to update the userlist
ExitWorkspace event = new ExitWorkspace(new PersonId(username));
workspace.publish(event);
}
}
}
@Observer(ProjectHome.PROJECT_UPDATE)
public void projectUpdate(HIterationProject project)
{
log.info("Project {0} updated", project.getSlug());
ImmutableSet workspaceSet = ImmutableSet.copyOf(workspaceMap.values());
for (TranslationWorkspace workspace : workspaceSet)
{
if (workspace.getWorkspaceContext().getWorkspaceId().getProjectIterationId().getProjectSlug().equals(project.getSlug()))
{
ProjectUpdate event = new ProjectUpdate(project.getSlug(), project.getStatus());
workspace.publish(event);
}
}
}
@Observer(ProjectIterationHome.PROJECT_ITERATION_UPDATE)
public void projectIterationUpdate(HProjectIteration projectIteration)
{
log.info("Project iteration {0} updated", projectIteration.getSlug());
ImmutableSet workspaceSet = ImmutableSet.copyOf(workspaceMap.values());
for (TranslationWorkspace workspace : workspaceSet)
{
if (workspace.getWorkspaceContext().getWorkspaceId().getProjectIterationId().getProjectSlug().equals(projectIteration.getProject().getSlug()) &&
workspace.getWorkspaceContext().getWorkspaceId().getProjectIterationId().getIterationSlug().equals(projectIteration.getSlug()))
{
ProjectIterationUpdate event = new ProjectIterationUpdate(projectIteration.getProject().getSlug(), projectIteration.getProject().getStatus(), projectIteration.getSlug(), projectIteration.getStatus());
workspace.publish(event);
}
}
}
@Destroy
public void stop()
{
log.info("stopping...");
log.info("closing down {0} workspaces: ", workspaceMap.size());
}
public ImmutableSet getLocales(ProjectIterationId projectIterationId)
{
return ImmutableSet.copyOf(projectIterationLocaleMap.get(projectIterationId));
}
public ImmutableSet getLocales()
{
return ImmutableSet.copyOf(localeWorkspaceMap.keySet());
}
public int getWorkspaceCount()
{
return workspaceMap.size();
}
public TranslationWorkspace getOrRegisterWorkspace(WorkspaceId workspaceId) throws NoSuchWorkspaceException
{
TranslationWorkspace workspace = workspaceMap.get(workspaceId);
if (workspace == null)
{
workspace = createWorkspace(workspaceId);
TranslationWorkspace prev = workspaceMap.putIfAbsent(workspaceId, workspace);
if (prev == null)
{
projectIterationLocaleMap.put(workspaceId.getProjectIterationId(), workspaceId.getLocaleId());
localeWorkspaceMap.put(workspaceId.getLocaleId(), workspace);
if (Events.exists())
Events.instance().raiseEvent(EVENT_WORKSPACE_CREATED, workspaceId);
}
return prev == null ? workspace : prev;
}
validateAndGetWorkspaceContext(workspaceId);
return workspace;
}
private WorkspaceContext validateAndGetWorkspaceContext(WorkspaceId workspaceId) throws NoSuchWorkspaceException
{
Session session = (Session) Component.getInstance("session");
EntityStatus projectStatus = (EntityStatus) session.createQuery("select p.status from HProject as p where p.slug = :slug").setParameter("slug", workspaceId.getProjectIterationId().getProjectSlug()).uniqueResult();
if (projectStatus.equals(EntityStatus.OBSOLETE))
{
throw new NoSuchWorkspaceException("Project is obsolete");
}
EntityStatus projectIterationStatus = (EntityStatus) session.createQuery("select it.status from HProjectIteration it where it.slug = :slug and it.project.slug = :pslug").setParameter("slug", workspaceId.getProjectIterationId().getIterationSlug()).setParameter("pslug", workspaceId.getProjectIterationId().getProjectSlug()).uniqueResult();
if (projectIterationStatus.equals(EntityStatus.OBSOLETE))
{
throw new NoSuchWorkspaceException("Project Iteration is obsolete");
}
String workspaceName = (String) session.createQuery("select it.project.name || ' (' || it.slug || ')' " + "from HProjectIteration it " + "where it.slug = :slug " + "and it.project.slug = :pslug " + "and it.status <> :status").setParameter("slug", workspaceId.getProjectIterationId().getIterationSlug()).setParameter("pslug", workspaceId.getProjectIterationId().getProjectSlug()).setParameter("status", EntityStatus.OBSOLETE).uniqueResult();
if (workspaceName == null)
{
throw new NoSuchWorkspaceException("Invalid workspace Id");
}
if (projectStatus.equals(EntityStatus.READONLY) || projectIterationStatus.equals(EntityStatus.READONLY))
{
return new WorkspaceContext(workspaceId, workspaceName, ULocale.getDisplayName(workspaceId.getLocaleId().toJavaName(), ULocale.ENGLISH), true);
}
return new WorkspaceContext(workspaceId, workspaceName, ULocale.getDisplayName(workspaceId.getLocaleId().toJavaName(), ULocale.ENGLISH), false);
}
private TranslationWorkspace createWorkspace(WorkspaceId workspaceId) throws NoSuchWorkspaceException
{
WorkspaceContext workspaceContext = validateAndGetWorkspaceContext(workspaceId);
return new TranslationWorkspace(workspaceContext);
}
public TranslationWorkspace getWorkspace(ProjectIterationId projectIterationId, LocaleId localeId)
{
WorkspaceId workspaceId = new WorkspaceId(projectIterationId, localeId);
return getWorkspace(workspaceId);
}
public TranslationWorkspace getWorkspace(WorkspaceId workspaceId)
{
return workspaceMap.get(workspaceId);
}
public ImmutableSet getWorkspaces(LocaleId locale)
{
return ImmutableSet.copyOf(localeWorkspaceMap.get(locale));
}
public ImmutableSet getProjects()
{
return ImmutableSet.copyOf(projectIterationLocaleMap.keySet());
}
=======
public TranslationWorkspace getOrRegisterWorkspace(WorkspaceId workspaceId) throws NoSuchWorkspaceException;
>>>>>>> b91743d3273b4189292aa00175079deb0d14c130
} |