|
2007年9月4日
一、軟件準備:
IBM Lotus Domino Server 7.0.2 ;
IBM Lotus Notes Designer and Admin Client 7.0.2 ;
IBM Lotus Sametime Server 7.5.1 ;
IBM Lotus Sametime Connect 7.5.1 ;
二、安裝順序:
Domino Server->Sametime Server->Notes Admin Client->Sametime Client
三、Domino Server安裝:
1.按照提示安裝Domino Server,選擇Domino Enterprise Server
2.運行Server Setup Program
3.選擇Set up the first server or a new Domino domain.
4.填寫Server name和Server title,Organization Name和Organization Certifier password
5.填寫管理員的名稱和密碼,一定要記錄該用戶名和密碼
6.選中Domino Server提供的Http Services
7.不必選中LDAP Service
四、Sametime Server安裝:
1.按照提示安裝Sametime Server,如果需要激活80端口,選中Enable HTTP tunneling。
2.啟動Sametime歡迎界面, http://domain/stcenter.nsf,登錄至管理頁面,如果無法登錄,可能是域名解析問題,將域名與ip的對應關系添加到windows/system32/drivers/etc/host文件中
3.如果歡迎界面沒有用戶注冊選項,需管理員開啟該功能。

在管理頁面中選擇Domino目錄->Domino,勾選
2007年1月4日
向已有的TreeViewer和TableViewer上添加編輯功能,可以使用CellEditor和CellModifier。
CellEditor定義了某個列被編輯時顯示的外觀,它可以是文本框、下拉列表框或單選框,也可以自己定義。
通常使用的CellEditor的子類就是:CheckboxCellEditor、ComboBoxCellEditor和TextCellEditor。 CellEditor一般用數組來保存,如果某個列不需要編輯,則可將該列的CellEditor設為null。 當CellEditor的數組定義完后,即可利用setCellEditors(CellEditor[] editors)方法將該數組設置到對應的TreeViewer或TableViewer中去。例如:
????CellEditor[]?cellEditors?
=
?
new
?CellEditor[
5
]; ????cellEditors[
0
]?
=
?
new
?TextCellEditor(tableViewer.getTable()); ????cellEditors[
1
]?
=
?
null
; ????cellEditors[
2
]?
=
?
new
?ComboBoxCellEditor(tableViewer.getTable(),?
new
?String[]{
"
first
"
,?
"
second
"
,?
"
third
"
,?
"
forth
"
}); ????cellEditors[
3
]?
=
?
new
?CheckboxCellEditor(tableViewer.getTable()); ????cellEditors[
4
]?
=
?
new
?CustomizedTextCellEditor(tableViewer.getTable()); ????tableViewer.setCellEditors(cellEditors);
其中CustomizedTextCellEditor是自定義的CellEditor,避免了設置value時造成的空指針異常。  protected?class?CustomizedTextCellEditor?extends?TextCellEditor {
 ????public?CustomizedTextCellEditor(Composite?parent) {
????????super(parent);
????}
 ????protected?void?doSetValue(Object?value)? {
????????if(value?==?null)
????????????return;
????????super.doSetValue(value);
????}????????
} CellEditor負責外觀,它對要編輯的模型信息一無所知。所以jface中引入了ICellModifier接口,將model與CellEditor聯系在一起。為了確定在CellModifier中的列,需要定義columnProperties的String[]數組,用以區分不同列對應的不同屬性。使用setColumnProperties(String[] columnProperties)設置該屬性集。
ICellModifier定義了三個接口方法: public boolean canModify(Object element, String property); 該方法判斷何時該列可以被編輯。其中element是對應的model。返回true表示此時該列可以被編輯。 public Object getValue(Object element, String property); 該方法一般在activateCellEditor()時調用,用于設定CellEditor的初始值。其中element是對應的model。 此處雖然可以返回Object類型的引用,但是使用時需小心,特定的CellEditor僅接受特定類型的Value。比如: TextCellEditor對應String類型的Value; ComboBoxCellEditor對應Integer類型的Value; CheckBoxCellEditor對應Boolean類型的Value; 若返回了不適合的Value對象,則會拋出AssertionFailedException。 public void modify(Object element, String property, Object value); 該方法執行保存修改。一般在saveEditorValue之類的方法中調用。此處的element不再是model,而是Item類型的引用。取用對應的模型,需要使用((Item) element).getData()方法。一般此處的value值,也就是當前CellEditor的Value值,使用CellEditor.getValue()得到。另外,在執行完更改后,需要刷新對應的TableViewer或TreeViewer,使做出的更新可見。
org.eclipse.debug.internal.ui.elements.adapters.DefaultVariableCellModifier是ICellModifier的一個完整實現: import?org.eclipse.debug.core.DebugException;
import?org.eclipse.debug.core.model.IVariable;
import?org.eclipse.debug.internal.ui.DebugUIPlugin;
import?org.eclipse.debug.internal.ui.DefaultLabelProvider;
import?org.eclipse.debug.internal.ui.VariableValueEditorManager;
import?org.eclipse.debug.ui.actions.IVariableValueEditor;
import?org.eclipse.jface.viewers.ICellModifier;

 /**?*//**
?*?@since?3.2
?*
?*/
 public?class?DefaultVariableCellModifier?implements?ICellModifier? {
????
 ????/**//*?(non-Javadoc)
?????*?@see?org.eclipse.jface.viewers.ICellModifier#canModify(java.lang.Object,?java.lang.String)
?????*/
 ????public?boolean?canModify(Object?element,?String?property)? {
 ????????if?(VariableColumnPresentation.COLUMN_VARIABLE_VALUE.equals(property))? {
 ????????????if?(element?instanceof?IVariable)? {
????????????????return?((IVariable)?element).supportsValueModification();
????????????}
????????}
????????return?false;
????}

 ????/**//*?(non-Javadoc)
?????*?@see?org.eclipse.jface.viewers.ICellModifier#getValue(java.lang.Object,?java.lang.String)
?????*/
 ????public?Object?getValue(Object?element,?String?property)? {
 ????????if?(VariableColumnPresentation.COLUMN_VARIABLE_VALUE.equals(property))? {
 ????????????if?(element?instanceof?IVariable)? {
????????????????IVariable?variable?=?(IVariable)?element;
 ????????????????try? {
????????????????????return?DefaultLabelProvider.escapeSpecialChars(variable.getValue().getValueString());
 ????????????????}?catch?(DebugException?e)? {
????????????????????DebugUIPlugin.log(e);
????????????????}
????????????}
????????}
????????return?null;
????}

 ????/**//*?(non-Javadoc)
?????*?@see?org.eclipse.jface.viewers.ICellModifier#modify(java.lang.Object,?java.lang.String,?java.lang.Object)
?????*/
 ????public?void?modify(Object?element,?String?property,?Object?value)? {
????????Object?oldValue?=?getValue(element,?property);
 ????????if?(!value.equals(oldValue))? {
 ????????????if?(VariableColumnPresentation.COLUMN_VARIABLE_VALUE.equals(property))? {
 ????????????????if?(element?instanceof?IVariable)? {
????????????????????IVariable?variable?=?(IVariable)?element;
????????????????????IVariableValueEditor?editor?=?VariableValueEditorManager.getDefault().getVariableValueEditor(variable.getModelIdentifier());
 ????????????????????if?(value?instanceof?String)? {
????????????????????????value?=?DefaultLabelProvider.encodeEsacpedChars((String)value);
????????????????????}
 ????????????????????if?(editor?!=?null)? {
 ????????????????????????if??(editor.saveVariable(variable,?(String)?value,?DebugUIPlugin.getShell()))? {
????????????????????????????return;
????????????????????????}
????????????????????}
 ????????????????????try? {
????????????????????????variable.setValue((String)?value);
 ????????????????????}?catch?(DebugException?e)? {
????????????????????????DebugUIPlugin.errorDialog(DebugUIPlugin.getShell(),?Messages.VariableColumnPresentation_4,?Messages.VariableColumnPresentation_5,?e.getStatus());
????????????????????}
????????????????}
????????????}
????????}
????}

}
2006年12月29日
GEF編輯器是構架在Draw2D的FigureCanvas上的,而FigureCanvas是swt中Canvas的子類.
當得到FigureCanvas之后,就可以得到GEF編輯器的區域和GEF編輯器內部畫布的大小:
編輯器區域大小:FigureCanvas.getBounds(); 這是運用了FigureCanvas是Canvas子類的特點,調用SWT的Canvas的getBounds()方法,即調用Control的getBounds()方法.
畫布大小:FigureCanvas.getContents.getBounds(); 這是運用了IFigure的getBounds()方法, 這兩個區域矩形不可混淆.
若要觸發GEF編輯器的滾動條操作,僅需調用FigureCanvas的scrollToX(int hOffset)和scrollToY(int vOffset)即可.
獲取FigureCanvas的方法也比較簡單.通過EditPart.getViewer()獲得EditPartViewer,一般情況下EditPartViewer的Control就是FigureCanvas.
列出代碼如下:
FigureCanvas?canvas?
=
?(FigureCanvas)EditPart.getViewer().getControl(); canvas.scrollToX(
500
); canvas.scrollToY(
600
); System.out.println(canvas.getBounds()); System.out.println(canvas.getContents().getBounds());
這個函數用法經常忘.. (String[])ArrayList.toArray(new String[0]);
摘要: 樹節點定義:class?TreeNode?{????public?TreeNode?left;????public?TreeNode?right;????public?int?value;????public?TreeNode(TreeNode?left,?TreeNode?right,?int?value)?{????????this.left?=?left;????????this.right... 閱讀全文
轉換成相對坐標,要運用translateToRelative(Point point)方法.
例如,在Eclipse Editor視圖中加入Figure,需要計算出相對于HostFigure的坐標,才能正確將figure放在鼠標點擊的位置.可以如下這樣做:
在getCreateCommand(CreateRequest request)方法中,加入如下語句:
Point location = request.getLocation().getCopy(); getHostFigure().translateToRelative(location);
如此獲得的location就是相對于HostFigure的坐標.
能夠獲得當前光標絕對坐標的方法是:
Display.getDefault().getCursorLocation()
最近項目中出現了一個bug,提示是Resource can not sync with file system.是文件系統不同步的問題,需要手動刷新一下資源管理器.
刷新資源管理器調用方法:
RefreshLocal
public void refreshLocal(int depth, IProgressMonitor monitor) ????????????????? throws CoreException
Refreshes the resource hierarchy from this resource and its children (to the specified depth) relative to the local file system. Creations, deletions, and changes detected in the local file system will be reflected in the workspace's resource tree. This resource need not exist or be local. This method may discover changes to resources; any such changes will be reported in a subsequent resource change event.
If a new file or directory is discovered in the local file system at or below the location of this resource, any parent folders required to contain the new resource in the workspace will also be created automatically as required.
This method is long-running; progress and cancellation are provided by the given progress monitor.
Parameters: depth - valid values are DEPTH_ZERO, DEPTH_ONE, or DEPTH_INFINITE monitor - a progress monitor, or null if progress reporting is not desired Throws: CoreException - if this method fails. Reasons include: Resource changes are disallowed during certain types of resource change event notification. See IResourceChangeEvent for more details. OperationCanceledException - if the operation is canceled. Cancelation can occur even if no progress monitor is provided. See Also: DEPTH_ZERO, DEPTH_ONE, DEPTH_INFINITE, IResourceRuleFactory.refreshRule(IResource)
該方法位于org.eclipse.core.resources.IResource
我的調用方法是:
ResourcesPlugin.getWorkspace().getRoot().refreshLocal(IResource.DEPTH_INFINITE, monitor);
|