/** * @version $Id: PatternDicEditor.java 1839 2014-04-16 02:33:51Z yukihiro-kinjyo $ * * 2011/08/29 17:28:42 * @author kousuke-morishima * * Copyright 2011-2014 TIDAコンソーシアム All Rights Reserved. */ package com.tida_okinawa.corona.ui.editors.pattern; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; import java.util.List; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorSite; import org.eclipse.ui.IPartListener; import org.eclipse.ui.PartInitException; import org.eclipse.ui.actions.ActionFactory; import org.eclipse.ui.forms.editor.FormEditor; import org.eclipse.ui.forms.editor.IFormPage; import org.eclipse.ui.part.FileEditorInput; import com.tida_okinawa.corona.io.IoActivator; import com.tida_okinawa.corona.io.model.dic.ICoronaDic; import com.tida_okinawa.corona.io.model.dic.IPatternDic; import com.tida_okinawa.corona.io.model.dic.PatternType; import com.tida_okinawa.corona.ui.editors.DicEditorDisposer; import com.tida_okinawa.corona.ui.editors.DicEditorInput; import com.tida_okinawa.corona.ui.editors.EditorUtil; /** * @author kousuke-morishima */ public class PatternDicEditor extends FormEditor { public static final String EDITOR_ID = "com.tida_okinawa.corona.ui.editor.patterndic"; public PatternDicEditor() { } private PatternDicPage page1 = null; @Override protected void addPages() { page1 = new PatternDicPage(this, (IPatternDic) coronaDic); try { addPage(page1); } catch (PartInitException e) { e.printStackTrace(); } } private ICoronaDic coronaDic; @Override public void init(IEditorSite site, IEditorInput input) throws PartInitException { if (input instanceof DicEditorInput) { } else if (input instanceof FileEditorInput) { input = EditorUtil.convertFrom((FileEditorInput) input); if (input == null) { throw new PartInitException("パターン辞書ではないため、開けません"); } } else { throw new PartInitException("インプットが辞書ではありません"); } DicEditorInput dicInput = (DicEditorInput) input; coronaDic = dicInput.getDictionary(); if (!(coronaDic instanceof IPatternDic)) { throw new PartInitException("パターン辞書ではないため、開けません"); } super.init(site, input); List<ICoronaDic> dics = new ArrayList<ICoronaDic>(1); dics.add(coronaDic); partListener = new DicEditorDisposer(this, dics); getSite().getPage().addPartListener(partListener); } @Override public void dispose() { super.dispose(); getSite().getPage().removePartListener(partListener); } /* **************************************** * 編集インタフェース */ /** * @param id * {@link ActionFactory#DELETE}とか {@link ActionFactory#CUT} * とかそんなんのID(DELETE以外は未実装) * @return */ protected boolean performAction(String id) { if (ActionFactory.DELETE.getId().equals(id)) { ((PatternDicPage) getActivePageInstance()).doDelete(); return true; } return false; } /* **************************************** * 保存的な */ @Override public boolean isDirty() { return page1.isDirty(); } @Override public void doSave(IProgressMonitor monitor) { page1.doSave(monitor); firePropertyChange(PROP_DIRTY); } @Override public void doSaveAs() { } @Override public boolean isSaveAsAllowed() { return false; } /* **************************************** * その他 */ private IPartListener partListener; @Override public String getPartName() { return getEditorInput().getName(); } @Override public String getTitleToolTip() { return getEditorInput().getToolTipText(); } @Override public void setFocus() { IFormPage activePage = getActivePageInstance(); if (activePage != null) { activePage.setFocus(); } } /** * @param element * not null */ public void reveal(Object element) { page1.reveal(element); } /* **************************************** * パターン分類を取得する * PatternRecordDetailsPageから使用されている */ /** * @return 現在DBに登録されているすべてのパターン分類 */ PatternType[] getPatternTypes() { PatternType[] types = IoActivator.getService().getPatternTypes(); Arrays.sort(types, new Comparator<PatternType>() { @Override public int compare(PatternType o1, PatternType o2) { /* idがマイナスのものは、常に後ろに持っていく。そうでなければ名前順 */ int id1 = o1.getId(); int id2 = o2.getId(); if ((id1 >= 0) && (id2 >= 0)) { return o1.getPatternName().compareTo(o2.getPatternName()); } if (id2 < 0) { return -1; } if (id1 < 0) { return 1; } return 0; } }); return types; } /** * @param name * 作成する分類の名前 * @return 作成した分類。すでに存在すればnull */ PatternType createPatternType(String name) { for (PatternType type : getPatternTypes()) { if (type.getPatternName().equals(name)) { return null; } } PatternType type = IoActivator.getService().addPatternType(name); return type; } }