/* * Copyright 2010 The Rabbit Eclipse Plug-in Project * * 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 rabbit.ui.internal.pages; import static rabbit.ui.internal.viewers.Viewers.refresh; import static rabbit.ui.internal.viewers.Viewers.resetInput; import rabbit.ui.IPage; import rabbit.ui.internal.util.ICategory; import rabbit.ui.internal.util.ICategoryProvider; import rabbit.ui.internal.util.IVisualProvider; import rabbit.ui.internal.util.TreePathValueProvider; import rabbit.ui.internal.viewers.IValueProvider; import org.eclipse.jface.viewers.IContentProvider; import org.eclipse.swt.widgets.TreeColumn; import org.eclipse.ui.IMemento; import org.eclipse.ui.dialogs.FilteredTree; import java.util.List; import java.util.Observable; import java.util.Observer; /** * Internal abstract page to reduce code duplication. */ public abstract class AbsPage implements IPage, Observer { @Override public void onRestoreState(IMemento memento) { String id = getClass().getSimpleName(); TreeColumn[] columns = getFilteredTree().getViewer().getTree().getColumns(); StateHelper helper = StateHelper.of(memento, id); helper.restoreColumnWidths(columns); Category visual = helper.retrieveSavedVisualCategory(); if (visual != null) { setVisualCategory(visual); } List<Category> selected = helper.retrieveSavedCategories(); if (selected != null) { setSelectedCategories(selected); } } @Override public void onSaveState(IMemento memento) { String id = getClass().getSimpleName(); TreeColumn[] columns = getFilteredTree().getViewer().getTree().getColumns(); StateHelper .of(memento, id) .saveColumnWidths(columns) .saveVisualCategory(getVisualCategory()) .saveCategories(getSelectedCategories()); } @Override public void update(Observable o, Object arg) { if (o instanceof IVisualProvider) { updateMaxValue(); refresh(getFilteredTree().getViewer()); } else if (o instanceof ICategoryProvider) { resetInput(getFilteredTree().getViewer()); } else if (o instanceof IContentProvider) { updateMaxValue(); } } protected abstract FilteredTree getFilteredTree(); /** * @return the current selected categories. * @see ICategoryProvider#getSelected() */ protected abstract Category[] getSelectedCategories(); /** * @return the current visual category. * @see IVisualProvider#getVisualCategory() */ protected abstract Category getVisualCategory(); /** * @param categories the categories to set. * @see ICategoryProvider#setSelected(ICategory...) */ protected abstract void setSelectedCategories(List<Category> categories); /** * @param category the category to set. * @see TreePathValueProvider#setVisualCategory(ICategory) */ protected abstract void setVisualCategory(Category category); /** * Updates {@link IValueProvider#getMaxValue()}. */ protected abstract void updateMaxValue(); }