/*
* 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.contents;
import com.smartgwt.client.types.Alignment;
import com.smartgwt.client.types.Overflow;
import com.smartgwt.client.types.VerticalAlignment;
import com.smartgwt.client.widgets.Button;
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 org.modeshape.web.client.contents.PropertiesEditor.PropertyRecord;
import org.modeshape.web.client.grid.TabGrid;
import org.modeshape.web.client.peditor.BaseEditor;
import org.modeshape.web.client.peditor.ValueEditor;
import org.modeshape.web.shared.JcrNode;
import org.modeshape.web.shared.JcrProperty;
/**
*
* @author kulikov
*/
@SuppressWarnings("synthetic-access")
public class PropertiesEditor extends TabGrid<PropertyRecord, JcrProperty> {
private JcrNode node;
private final Contents contents;
public PropertiesEditor(Contents contents) {
super("Properties");
this.contents = contents;
}
public void show(JcrNode node) {
this.node = node;
setValues(node.getProperties());
}
@Override
protected PropertyRecord[] records() {
PropertyRecord[] records = new PropertyRecord[100];
for (int i = 0; i < records.length; i++) {
records[i] = new PropertyRecord();
}
return records;
}
@Override
protected HLayout tableHeader() {
HLayout header = new HLayout();
header.setHeight(30);
header.setBackgroundColor("#e6f1f6");
Label name = new Label("<b>Name</b>");
name.setWidth100();
Label value = new Label("<b>Value</b>");
value.setWidth100();
header.addMember(name);
header.addMember(value);
return header;
}
@Override
protected HLayout toolBar() {
HLayout header = new HLayout();
header.setBackgroundColor("#ffffff");
header.setAlign(Alignment.LEFT);
header.setDefaultLayoutAlign(Alignment.LEFT);
header.setLayoutAlign(Alignment.LEFT);
header.setDefaultLayoutAlign(VerticalAlignment.CENTER);
header.setLayoutAlign(VerticalAlignment.CENTER);
header.setAlign(VerticalAlignment.CENTER);
header.setHeight(30);
header.setContents("Click respective to edit property value");
return header;
}
@Override
protected void updateRecord(int pos, PropertyRecord record, JcrProperty value) {
record.setValue(value);
}
protected class PropertyRecord extends HLayout {
//visible height of the recorod
private final static int RECORD_HEIGHT = 30;
private Label name = new Label();
private Label value = new Label();
private Button editButton = new Button();
private ValueEditor<String> editor;
public PropertyRecord() {
super();
setStyleName("grid");
setHeight(RECORD_HEIGHT);
setDefaultLayoutAlign(VerticalAlignment.CENTER);
setDefaultLayoutAlign(Alignment.LEFT);
setLayoutAlign(VerticalAlignment.CENTER);
setLayoutAlign(Alignment.CENTER);
setAlign(VerticalAlignment.CENTER);
setAlign(Alignment.LEFT);
name.setIcon("icons/sprocket.png");
name.setStyleName("text");
name.setWidth100();
value.setStyleName("text");
value.setWidth100();
value.setOverflow(Overflow.HIDDEN);
value.setAlign(Alignment.RIGHT);
value.setLayoutAlign(Alignment.RIGHT);
editButton.setTitle("...");
editButton.setWidth(RECORD_HEIGHT);
editButton.setHeight(RECORD_HEIGHT);
addMember(name);
addMember(value);
addMember(editButton);
}
private void setValue(final JcrProperty property) {
name.setContents(property.getName());
value.setContents(property.getDisplayValue());
editor = BaseEditor.getValueEditor(property.getName(),
property.getType(), PropertiesEditor.this.contents);
editButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
//show modal form with reference to property.getValue()
editor.setValue(node, property.getName(), property.getValue());
}
});
}
}
}