/*
* Copyright 2017 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.kie.workbench.common.stunner.project.client.screens;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.enterprise.context.Dependent;
import javax.enterprise.event.Observes;
import javax.inject.Inject;
import com.google.gwt.logging.client.LogConfiguration;
import org.uberfire.client.workbench.docks.UberfireDock;
import org.uberfire.client.workbench.docks.UberfireDockPosition;
import org.uberfire.client.workbench.docks.UberfireDockReadyEvent;
import org.uberfire.client.workbench.docks.UberfireDocks;
import org.uberfire.mvp.impl.DefaultPlaceRequest;
// TODO: i18n.
@Dependent
public class ProjectDiagramWorkbenchDocks {
private static Logger LOGGER = Logger.getLogger(ProjectDiagramWorkbenchDocks.class.getName());
private final static UberfireDockPosition POSITION = UberfireDockPosition.EAST;
private final UberfireDocks uberfireDocks;
String perspectiveId;
boolean enabled;
boolean attached;
private UberfireDock propertiesDock;
private UberfireDock explorerDock;
protected ProjectDiagramWorkbenchDocks() {
this(null);
}
@Inject
public ProjectDiagramWorkbenchDocks(final UberfireDocks uberfireDocks) {
this.uberfireDocks = uberfireDocks;
this.attached = false;
this.enabled = false;
}
public void setup(final String perspectiveId) {
this.perspectiveId = perspectiveId;
}
public void enableDocks() {
if (!isEnabled()) {
log(Level.INFO,
"Enabling docks");
uberfireDocks.enable(POSITION,
perspectiveId);
this.enabled = true;
}
}
public void disableDocks() {
if (isEnabled()) {
log(Level.INFO,
"Disabling docks");
// TODO: Ask to walter - uberfireDocks.disable( POSITION, perspectiveId );
uberfireDocks.disable(POSITION,
perspectiveId);
this.enabled = false;
}
}
public boolean isEnabled() {
return enabled;
}
private void attachDocks() {
if (null == propertiesDock) {
propertiesDock = createPropertiesDock(perspectiveId);
}
if (null == explorerDock) {
explorerDock = createExplorerDock(perspectiveId);
}
if (!attached) {
log(Level.INFO,
"Attaching docks");
uberfireDocks.add(propertiesDock);
uberfireDocks.add(explorerDock);
attached = true;
}
}
private void detachDocks() {
if (attached) {
log(Level.INFO,
"Detaching docks");
if (null != propertiesDock) {
uberfireDocks.remove(propertiesDock);
}
if (null != explorerDock) {
uberfireDocks.remove(explorerDock);
}
attached = false;
}
}
void onDockReadyEvent(final @Observes UberfireDockReadyEvent dockReadyEvent) {
final String currentPerspectiveId = dockReadyEvent.getCurrentPerspective();
if (null != currentPerspectiveId && currentPerspectiveId.equals(this.perspectiveId)) {
attachDocks();
} else {
detachDocks();
}
}
private UberfireDock createPropertiesDock(final String perspectiveId) {
return new UberfireDock(POSITION,
"PENCIL_SQUARE_O",
new DefaultPlaceRequest(ProjectDiagramPropertiesScreen.SCREEN_ID),
perspectiveId)
.withSize(450)
.withLabel("Properties");
}
private UberfireDock createExplorerDock(final String perspectiveId) {
return new UberfireDock(POSITION,
"EYE",
new DefaultPlaceRequest(ProjectDiagramExplorerScreen.SCREEN_ID),
perspectiveId)
.withSize(450)
.withLabel("Explore");
}
private void log(final Level level,
final String message) {
if (LogConfiguration.loggingIsEnabled()) {
LOGGER.log(level,
message);
}
}
}