/*
* ModeShape (http://www.modeshape.org)
*
* 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.modeshape.web.client.repo;
import com.smartgwt.client.types.Alignment;
import com.smartgwt.client.types.VerticalAlignment;
import com.smartgwt.client.widgets.Img;
import com.smartgwt.client.widgets.Label;
import com.smartgwt.client.widgets.events.ClickEvent;
import com.smartgwt.client.widgets.events.ClickHandler;
import com.smartgwt.client.widgets.layout.HLayout;
import com.smartgwt.client.widgets.layout.VLayout;
import org.modeshape.web.client.Console;
import org.modeshape.web.client.admin.AdminView;
import org.modeshape.web.client.nt.NodeTypesModalForm;
import org.modeshape.web.client.query.QueryModalForm;
/**
*
* @author kulikov
*/
public class RepositoryHeader extends HLayout {
private final static int HEIGHT = 55;
private final static int LOGO_WIDTH = 45;
private Label label = new Label();
private String repositoryName;
//inner bar with
private HLayout mainLayout = new HLayout();
private final Console console;
private final NodeTypesModalForm ntForm;
private final QueryModalForm queryForm;
private final DescriptorModalForm descriptorForm;
private final AdminView adminView;
public RepositoryHeader(final Console console) {
this.console = console;
ntForm = new NodeTypesModalForm(console);
queryForm = new QueryModalForm(console);
descriptorForm = new DescriptorModalForm(console);
adminView = new AdminView(console);
//set layout alignment for center
alignAndResize();
//add main layout separated bounded with struts
addMember(new Strut(10));
addMember(mainLayout);
addMember(new Strut(10));
//resize main layout
mainLayout.setWidth("80%"); //do not modify, otherwise it wont resize it properly (don't know why)
mainLayout.setHeight(HEIGHT);
//separate main layout on two columns
HLayout col1 = new HLayout();
col1.setLayoutAlign(VerticalAlignment.CENTER);
col1.setDefaultLayoutAlign(VerticalAlignment.CENTER);
col1.setWidth100();
VLayout col2 = new VLayout();
col2.setHeight(30);
col2.setLayoutAlign(Alignment.RIGHT);
col2.setDefaultLayoutAlign(Alignment.RIGHT);
col2.setDefaultLayoutAlign(VerticalAlignment.CENTER);
col2.setLayoutAlign(VerticalAlignment.CENTER);
col2.setAlign(Alignment.RIGHT);
col2.setAutoWidth();
mainLayout.addMember(col1);
mainLayout.addMember(col2);
//put repository name label into left column(col1)
label.setStyleName("repository-caption");
label.setWidth("100%");
label.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
console.loadRepositoriesList();
}
});
label.setValign(VerticalAlignment.CENTER);
col1.addMember(new RepositoryIcon(LOGO_WIDTH, HEIGHT));
col1.addMember(label);
//fill column 2
col2.addMember(new Toolbar(console));
}
private void alignAndResize() {
setStyleName("repository");
setLayoutAlign(Alignment.CENTER);
setLayoutAlign(VerticalAlignment.CENTER);
setDefaultLayoutAlign(Alignment.CENTER);
setDefaultLayoutAlign(VerticalAlignment.CENTER);
setHeight(HEIGHT);
setWidth100();
}
/**
* Set width of main layout.
*
* @param value
*/
public void setLayoutWidth(String value) {
mainLayout.setWidth(value);
}
/**
* Gets the name of the repository.
*
* @return the name of repository displayed.
*/
public String repository() {
return this.repositoryName;
}
/**
* Displays given repository name.
*
* @param name repository name.
*/
public void show(String name) {
this.repositoryName = name;
label.setContents("Repository: " + name);
show();
}
public void showRepositoryInfo() {
descriptorForm.showModal();
}
public void showNodeTypes() {
ntForm.showModal();
}
public void showContent() {
console.loadNodeSpecifiedByURL();
}
public void showQuery() {
queryForm.showModal();
}
public void showAdmin() {
console.display(adminView);
}
/**
* Icon image near repository name
*/
private class RepositoryIcon extends Img {
private final static String IMG_PATH = "icons/attach.png";
public RepositoryIcon(int width, int height) {
setSrc(IMG_PATH);
setWidth(width);
setHeight(height);
setValign(VerticalAlignment.CENTER);
}
}
private class Toolbar extends HLayout {
public Toolbar(final Console console) {
setHeight(30);
setLayoutAlign(Alignment.RIGHT);
setDefaultLayoutAlign(Alignment.RIGHT);
setAlign(Alignment.RIGHT);
setStyleName("viewport");
setAutoWidth();
ToolButton explore = new ToolButton("Explore");
explore.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
showContent();
}
});
ToolButton nodeTypes = new ToolButton("NodeTypes");
nodeTypes.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
showNodeTypes();
}
});
ToolButton descriptor = new ToolButton("Descriptor");
descriptor.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
showRepositoryInfo();
}
});
ToolButton query = new ToolButton("Query");
query.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
showQuery();
}
});
ToolButton admin = new ToolButton("Admin");
admin.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
showAdmin();
}
});
addMember(new Spacer(10));
addMember(explore);
addMember(new Spacer(10));
addMember(nodeTypes);
addMember(new Spacer(10));
addMember(descriptor);
addMember(new Spacer(10));
addMember(query);
addMember(new Spacer(10));
addMember(admin);
addMember(new Spacer(10));
setHeight(30);
}
}
private class ToolButton extends Label {
public ToolButton(String title) {
super("<b>" + title + "</b>");
setAlign(Alignment.RIGHT);
setAutoWidth();
setStyleName("tab-label");
}
}
private class Spacer extends HLayout {
protected Spacer(int size) {
super();
setWidth(size);
}
}
private class Strut extends VLayout {
public Strut(int size) {
super();
setHeight(size);
}
}
}