/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.apache.usergrid.chop.webapp.view.chart.layout.item;
import com.vaadin.ui.AbsoluteLayout;
import com.vaadin.ui.Button;
import com.vaadin.ui.TextArea;
import com.vaadin.ui.themes.Reindeer;
import org.apache.usergrid.chop.webapp.dao.NoteDao;
import org.apache.usergrid.chop.webapp.dao.model.Note;
import org.apache.usergrid.chop.webapp.service.InjectorFactory;
import org.apache.usergrid.chop.webapp.view.util.UIUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
public class NoteLayout extends AbsoluteLayout {
private static final Logger LOG = LoggerFactory.getLogger(NoteLayout.class);
private NoteDao noteDao = InjectorFactory.getInstance(NoteDao.class);
private TextArea textArea;
private Button editButton;
private Button saveButton;
private Button cancelButton;
private String commitId;
private int runNumber;
private String oldText;
public NoteLayout() {
init();
addButtons();
textArea = UIUtil.addTextArea(this, "", "left: 0px; top: 35px;", "250px", "100px", true);
}
private void init() {
setWidth("250px");
setHeight("250px");
}
private void addButtons() {
UIUtil.addLabel(this, "Note:", "left: 0px; top: 10px;", "120px");
editButton = createButton("Edit", "left: 210px; top: 10px;", true);
editButton.addClickListener(new Button.ClickListener() {
public void buttonClick(Button.ClickEvent event) {
edit();
}
});
saveButton = createButton("Save", "left: 170px; top: 10px;", false);
saveButton.addClickListener(new Button.ClickListener() {
public void buttonClick(Button.ClickEvent event) {
save();
cancel();
}
});
cancelButton = createButton("Cancel", "left: 210px; top: 10px;", false);
cancelButton.addClickListener(new Button.ClickListener() {
public void buttonClick(Button.ClickEvent event) {
restoreText();
cancel();
}
});
}
private void restoreText() {
textArea.setValue(oldText);
}
private Button createButton(String caption, String position, boolean visible) {
Button button = UIUtil.addButton(this, caption, position, "50px");
button.setStyleName(Reindeer.BUTTON_LINK);
button.setVisible(visible);
return button;
}
private void edit() {
editButton.setVisible(false);
saveButton.setVisible(true);
cancelButton.setVisible(true);
textArea.setReadOnly(false);
}
private void cancel() {
editButton.setVisible(true);
saveButton.setVisible(false);
cancelButton.setVisible(false);
textArea.setReadOnly(true);
}
private void save() {
Note note = new Note(commitId, runNumber, textArea.getValue());
try {
noteDao.save(note);
} catch (IOException e) {
LOG.error("Exception while saving a note: ", e);
}
}
private void doLoad(String commitId, int runNumber) {
this.commitId = commitId;
this.runNumber = runNumber;
Note note = noteDao.get(commitId, runNumber);
oldText = note != null ? note.getText() : "";
textArea.setReadOnly(false);
textArea.setValue(oldText);
}
public void load(String commitId, int runNumber) {
doLoad(commitId, runNumber);
cancel();
}
}