org.modeshape.web.client.Console Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of modeshape-web-explorer
Show all versions of modeshape-web-explorer
ModeShape repository explorer that does not contain ModeShape libraries
/*
* 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;
import org.modeshape.web.client.repo.RepositoryHeader;
import org.modeshape.web.client.repo.RepositoriesList;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.smartgwt.client.types.Alignment;
import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.layout.VLayout;
import java.util.Collection;
import org.modeshape.web.client.contents.Contents;
import org.modeshape.web.shared.BaseCallback;
import org.modeshape.web.shared.RepositoryName;
/**
* Entry point classes define onModuleLoad()
.
*/
public class Console implements EntryPoint, ValueChangeHandler {
private final static String LAYOUT_WIDTH = "85%";
/**
* Create a remote service proxy to talk to the server-side Greeting service.
*/
private final JcrServiceAsync jcrService = GWT.create(JcrService.class);
//Main form
private final VLayout mainForm = new VLayout();
//Browser's URL and history.
private final JcrURL jcrURL = new JcrURL();
private final HtmlHistory htmlHistory = new HtmlHistory();
private final VLayout viewPort = new VLayout();
private final Header header = new Header(this);
private final Footer footer = new Footer();
private final RepositoriesList repositoriesList = new RepositoriesList(this, jcrService);
private final RepositoryHeader repositoryHeader = new RepositoryHeader(this);
private final Contents contents = new Contents(this);
private final LoadingIcon loadingIcon = new LoadingIcon();
/**
* Provides data access.
*
* @return
*/
public JcrServiceAsync jcrService() {
return this.jcrService;
}
/**
* This is the entry point method.
*/
@Override
public void onModuleLoad() {
//start from the requested URL
jcrService.getRequestedURI(new BaseCallback() {
@SuppressWarnings( "synthetic-access" )
@Override
public void onSuccess( String result ) {
//parse requested url to determine navigation
jcrURL.parse(result);
//before navigate to the requested URL we need to
//check is this user already logged in or not yet.
getCredentials();
}
});
}
/**
* Checks user's credentials.
*/
private void getCredentials() {
jcrService.getUserName(new BaseCallback() {
@Override
public void onSuccess(String name) {
showMainForm(name);
}
});
}
/**
* Reconstructs URL and points browser to the requested node path.
*/
public void loadNodeSpecifiedByURL() {
repositoriesList.select(jcrURL.getRepository(), jcrURL.getWorkspace(), jcrURL.getPath(), true);
}
/**
* Displays name of the logged in user.
*
* @param userName
*/
protected void changeUserName(String userName) {
header.setUserName(userName);
}
/**
* Gets selected repository name.
*
* @return repository name;
*/
public String repository() {
return this.repositoryHeader.repository();
}
/**
* Shows main page for the logged in user.
*
* @param userName the name of the user.
*/
public void showMainForm(String userName) {
align();
changeUserName(userName);
mainForm.addMember(header);
mainForm.addMember(repositoryHeader);
mainForm.addMember(viewPort);
mainForm.addMember(strut(30));
mainForm.addMember(footer);
setLayoutWidth(LAYOUT_WIDTH);
loadData();
//init HTML history
htmlHistory.addValueChangeHandler(this);
mainForm.draw();
}
/**
* Align components
*/
private void align() {
mainForm.setLayoutMargin(5);
mainForm.setWidth100();
mainForm.setHeight100();
mainForm.setBackgroundColor("#FFFFFF");
mainForm.setAlign(Alignment.CENTER);
mainForm.setLayoutAlign(Alignment.CENTER);
mainForm.setDefaultLayoutAlign(Alignment.CENTER);
viewPort.setWidth(LAYOUT_WIDTH);
viewPort.setLayoutAlign(Alignment.CENTER);
viewPort.setAlign(Alignment.CENTER);
viewPort.setDefaultLayoutAlign(Alignment.CENTER);
}
/**
* Tests is initial URL points to the specific node.
*
* @return true if URL points to the node.
*/
private boolean isInitialUrlPointsNode() {
return jcrURL.getRepository() != null && jcrURL.getRepository().length() > 0;
}
/**
* Loads data.
*/
private void loadData() {
if (isInitialUrlPointsNode()) {
loadNodeSpecifiedByURL();
} else {
loadRepositoriesList();
}
}
/**
* Load repositories available for the logged in user.
*/
public void loadRepositoriesList() {
repositoriesList.load();
}
/**
* Synchronously aligns header and view port.
*
* @param value the relative width;
*/
private void setLayoutWidth(String value) {
repositoryHeader.setLayoutWidth(value);
viewPort.setWidth(value);
}
/**
*
* @return
*/
public Contents contents() {
return contents;
}
/**
* Hides contents and shows "animated" load icon.
*/
public void showLoadingIcon() {
loadingIcon.show(mainForm.getWidth() / 2, mainForm.getHeight() / 2);
}
/**
* Hides "animated" load icon and shows contents.
*/
public void hideLoadingIcon() {
loadingIcon.hide();
}
/**
* Display repository header with given name.
*
* @param name the name of the repository.
*/
public void displayRepository(String name) {
repositoryHeader.show(name);
}
/**
* Hides repository header.
*/
public void hideRepository() {
repositoryHeader.hide();
}
/**
* Changes repository name in URL displayed by browser.
*
* @param name the name of the repository.
* @param changeHistory if true store URL changes in history.
*/
public void changeRepositoryInURL(String name, boolean changeHistory) {
jcrURL.setRepository(name);
if (changeHistory) {
htmlHistory.newItem(jcrURL.toString(), false);
}
}
/**
* Changes workspace in the URL displayed by browser.
*
* @param name the name of the repository.
* @param changeHistory if true store URL changes in browser's history.
*/
public void changeWorkspaceInURL(String name, boolean changeHistory) {
jcrURL.setWorkspace(name);
if (changeHistory) {
htmlHistory.newItem(jcrURL.toString(), false);
}
}
/**
* Changes node path in the URL displayed by browser.
*
* @param path the path to the node.
* @param changeHistory if true store URL changes in browser's history.
*/
public void changePathInURL(String path, boolean changeHistory) {
jcrURL.setPath(path);
if (changeHistory) {
htmlHistory.newItem(jcrURL.toString(), false);
}
}
@Override
public void onValueChange(ValueChangeEvent event) {
jcrURL.parse2(event.getValue());
repositoriesList.select(jcrURL.getRepository(), jcrURL.getWorkspace(), jcrURL.getPath(), false);
}
/**
* Displays list of availables repositories.
*
* @param names names of repositories.
*/
public void showRepositories(Collection names) {
repositoriesList.show(names);
display(repositoriesList);
this.hideRepository();
}
/**
* Displays node for the given repository, workspace and path.
*
* @param repository the name of the repository.
* @param workspace the name of workspace.
* @param path the path to the node.
* @param changeHistory store changes in browser history.
*/
public void displayContent(String repository, String workspace, String path,
boolean changeHistory) {
contents.show(repository, workspace, path, changeHistory);
displayRepository(repository);
display(contents);
changeRepositoryInURL(repository, changeHistory);
}
/**
* Displays root node for given repository and first available workspace.
*
* @param repository the name of the repository.
* @param changeHistory store changes in browser history or no.
*/
public void displayContent(String repository, boolean changeHistory) {
contents.show(repository, changeHistory);
displayRepository(repository);
display(contents);
changeRepositoryInURL(repository, changeHistory);
}
public void display(Canvas view) {
Canvas[] members = viewPort.getMembers();
for (Canvas canvas : members) {
canvas.setVisible(false);
viewPort.removeChild(canvas);
}
viewPort.addMember(view);
view.setVisible(true);
view.show();
}
private VLayout strut( int height ) {
VLayout s = new VLayout();
s.setHeight(height);
return s;
}
}