blob: 12694a86f0b75f9210c1bdb1970efd7ca63537a7 [file] [log] [blame]
/****************************************************************
* 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.hupa.client.widgets;
import org.apache.hupa.shared.domain.ImapFolder;
import org.apache.hupa.widgets.event.EditEvent;
import org.apache.hupa.widgets.ui.EditableTreeItem;
public class IMAPTreeItem extends EditableTreeItem {
protected String oldFullName;
protected String oldName;
public IMAPTreeItem(ImapFolder folder) {
setUserObject(folder);
setFolderText(folder);
}
@Override
public void setSelected(boolean selected) {
super.setSelected(selected);
if (isSelected()) {
getWidget().addStyleName("hupa-IMAPFolder-selected");
} else {
getWidget().removeStyleName("hupa-IMAPFolder-selected");
}
}
/**
* Decrease the unseen messagecount of this folder
*/
public void decreaseUnseenMessageCount() {
descreaseUnseenMessageCount(1);
}
public void setUnseenMessageCount(int cound) {
ImapFolder folder = (ImapFolder) getUserObject();
int count = folder.getUnseenMessageCount();
folder.setUnseenMessageCount(count);
setFolderText(folder);
}
/**
* Decrease the unseen messagecount of this folder
*/
public void descreaseUnseenMessageCount(int decreaseCount) {
ImapFolder folder = (ImapFolder) getUserObject();
int count = folder.getUnseenMessageCount();
if (count > 0) {
count = count - decreaseCount;
if (count < 0) {
count = 0;
}
folder.setUnseenMessageCount(count);
setFolderText(folder);
}
}
/**
* Increase the unseen messagecount of this folder
*/
public void increaseUnseenMessageCount() {
increaseUnseenMessageCount(1);
}
/**
* Increase the unseen messagecount of this folder
*/
public void increaseUnseenMessageCount(int increaseCount) {
ImapFolder folder = (ImapFolder) getUserObject();
int count = folder.getUnseenMessageCount();
count = count + increaseCount;
folder.setUnseenMessageCount(count);
setFolderText(folder);
}
private void setFolderText(ImapFolder folder) {
setText(getFolderName(folder));
setUnseenMessageCountStyle(folder);
}
private void setUnseenMessageCountStyle(ImapFolder folder) {
boolean containsUnseen = (folder.getUnseenMessageCount() > 0);
for (ImapFolder fold : folder.getChildren()) {
if (fold.getUnseenMessageCount() > 0) {
containsUnseen = true;
break;
}
}
if (containsUnseen) {
getWidget().addStyleName("hupa-IMAPFolder-unseen");
} else {
getWidget().removeStyleName("hupa-IMAPFolder-unseen");
}
}
/**
* Return the folder name to display in the TreeItem for the given
* IMAPFolder
*
* @param folder
* @return name
*/
private String getFolderName(ImapFolder folder) {
if (folder.getUnseenMessageCount() > 0) {
return folder.getName() + " (" + folder.getUnseenMessageCount() + ")";
}
return folder.getName();
}
@Override
public void setUserObject(Object obj) {
if ((obj instanceof ImapFolder) == false) {
throw new IllegalArgumentException("UserObject needs to be an instance of IMAPFolder");
}
setFolderText((ImapFolder) obj);
super.setUserObject(obj);
}
@Override
public void startEdit() {
ImapFolder folder = (ImapFolder) getUserObject();
oldFullName = folder.getFullName();
oldName = folder.getName();
showEditBox(oldName);
manager.fireEvent(new EditEvent(EditEvent.EventType.Start, oldFullName, null));
}
@Override
public void cancelEdit() {
ImapFolder folder = ((ImapFolder) getUserObject());
folder.setFullName(oldFullName);
showItem(getFolderName(folder));
manager.fireEvent(new EditEvent(EditEvent.EventType.Cancel, oldFullName, null));
}
@Override
public void stopEdit() {
if (editBox.getText().length() < 1) {
// Empty folder name is not allowed!
cancelEdit();
} else {
String newFolderName = editBox.getText();
String newFullFolderName = oldFullName.substring(0, oldFullName.length() - oldName.length())
+ newFolderName;
ImapFolder folder = ((ImapFolder) getUserObject());
folder.setFullName(newFullFolderName);
showItem(getFolderName(folder));
manager.fireEvent(new EditEvent(EditEvent.EventType.Stop, oldFullName, newFullFolderName));
}
}
}