// (C) Copyright 2003-2014 Hewlett-Packard Development Company, L.P.
package com.hp.alm.ali.idea.ui;
import com.hp.alm.ali.idea.rest.RestService;
import com.hp.alm.ali.idea.rest.ServerType;
import com.hp.alm.ali.idea.rest.ServerTypeListener;
import com.hp.alm.ali.idea.services.AbstractCachingService;
import com.hp.alm.ali.idea.services.WorkspaceService;
import com.hp.alm.ali.idea.ui.editor.field.HTMLAreaField;
import com.intellij.openapi.project.Project;
import com.intellij.util.ui.UIUtil;
import javax.swing.JTextPane;
import javax.swing.event.HyperlinkEvent;
import javax.swing.event.HyperlinkListener;
import java.awt.Color;
import java.util.Map;
public class WorkspaceWarningPanel extends WarningPanel implements HyperlinkListener, ServerTypeListener {
private RestService restService;
private WorkspaceService workspaceService;
private int workspaceId;
private String workspaceName;
public WorkspaceWarningPanel(Project project, final int workspaceId, Color background, boolean canClose) {
super(HTMLAreaField.createTextPane(""), background, canClose, false);
this.workspaceId = workspaceId;
this.restService = project.getComponent(RestService.class);
this.workspaceService = project.getComponent(WorkspaceService.class);
((JTextPane)getComponent()).addHyperlinkListener(this);
project.getComponent(RestService.class).addServerTypeListener(this);
connectedTo(restService.getServerTypeIfAvailable());
}
@Override
public void hyperlinkUpdate(HyperlinkEvent e) {
if(e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
workspaceService.selectWorkspace(workspaceId, workspaceName);
}
}
@Override
public void connectedTo(final ServerType serverType) {
if (serverType == ServerType.AGM && workspaceName == null) {
workspaceService.listWorkspacesAsync(new AbstractCachingService.DispatchCallback<Map<Integer, String>>() {
@Override
public void loaded(Map<Integer, String> data) {
workspaceName = data.get(workspaceId);
enabledDisable(restService.getServerTypeIfAvailable());
}
});
} else {
UIUtil.invokeLaterIfNeeded(new Runnable() {
@Override
public void run() {
enabledDisable(serverType);
}
});
}
}
private void enabledDisable(ServerType serverType) {
if (serverType == ServerType.AGM && workspaceName != null && workspaceId != workspaceService.getWorkspaceId()) {
((JTextPane) getComponent()).setText(getTextValue());
setVisible(true);
} else {
setVisible(false);
}
}
private String getTextValue() {
StringBuffer buf = new StringBuffer();
buf.append("<html><body>Entity belongs to another workspace.");
buf.append(" Switch to <a href=\"workspace\">");
buf.append(workspaceName);
buf.append("</a></body></html>.");
buf.append("</body></html>.");
return buf.toString();
}
}