package com.wilutions.joa.example1;
import com.wilutions.com.CoClass;
import com.wilutions.com.ComException;
import com.wilutions.com.Dispatch;
import com.wilutions.com.IDispatch;
import com.wilutions.joa.DeclAddin;
import com.wilutions.joa.LoadBehavior;
import com.wilutions.joa.OfficeApplication;
import com.wilutions.joa.TaskPane;
import com.wilutions.joa.outlook.OutlookAddin;
import com.wilutions.mslib.msforms.Control;
import com.wilutions.mslib.msforms.Page;
import com.wilutions.mslib.outlook.ContactItem;
import com.wilutions.mslib.outlook.MAPIFolder;
import com.wilutions.mslib.outlook.OlDefaultFolders;
import com.wilutions.mslib.outlook.OlItemType;
import com.wilutions.mslib.outlook._Folders;
import com.wilutions.mslib.outlook._Inspector;
import com.wilutions.mslib.outlook._NameSpace;
import com.wilutions.mslib.outlook.impl.PagesImpl;
@CoClass(progId = "JoaExample1.Addin", guid = "{0020ABA7-EC2D-481F-A6A3-406FDE391259}")
@DeclAddin(loadBehavior=LoadBehavior.LoadOnStart, application = OfficeApplication.Outlook, friendlyName = "Example1 Java Addin", description = "First example for an Outlook Addin developed in Java")
public class MyOutlookAddin extends OutlookAddin {
private static MyOutlookAddin instance;
private TaskPane taskPane1 = new MyTaskPane();
public MyOutlookAddin() {
instance = this;
}
public static MyOutlookAddin getInstance() {
return instance;
}
@Override
public void onButtonClicked(IDispatch ribbonControl) {
System.out.println("onButtonClicked " + ribbonControl);
try {
_NameSpace olns = getApplication().GetNamespace("MAPI");
MAPIFolder myFolder = olns.GetDefaultFolder(OlDefaultFolders.olFolderContacts);
System.out.println("myFoldeR=" +myFolder);
_Folders folders = olns.getFolders();
int foldersCount = folders.getCount();
System.out.println("folderscount=" + foldersCount);
MAPIFolder folder_i = folders.GetFirst();
while (folder_i != null) {
String fullPath = folder_i.getFolderPath();
System.out.println("fullPath=" + fullPath);
folder_i = folders.GetNext();
}
MAPIFolder folder = getApplication().getSession().PickFolder();
String folderName = folder.getFolderPath();
System.out.println(folderName);
// PickerDialog pdlg = app.getPickerDialog();
// pdlg.setDataHandlerId("{000CDF0A-0000-0000-C000-000000000046}");
// pdlg.setTitle("Sample Picker Dialog");
// PickerProperties props = pdlg.getProperties();
// props.Add("SiteUrl", "http://www.elo.com",
// MsoPickerField.msoPickerFieldText);
// PickerResults existingResults = pdlg.CreatePickerResults();
// existingResults.Add("johndoe@contoso.com", "John Doe", "User",
// "", null, null);
// ByRef<PickerResults> existingResultsRef = new
// ByRef<PickerResults>(existingResults);
// PickerResults pickerResults = pdlg.Show(Boolean.FALSE,
// existingResultsRef);
// System.out.println("pickerResults=" + pickerResults);
// Dispatch dispMailItem = app.CreateItem(OlItemType.olMailItem);
// MailItem mailItem = new MailItem(dispMailItem);
// mailItem.setCC("w.imig@elo.com");
// Recipients recipients = mailItem.getRecipients();
// recipients.Add("w.imig@elo.com");
// mailItem.getRecipients().Add("a.grunna@elo.com");
// OlObjectClass cls = mailItem.getClass_();
//
// OlImportance imp = mailItem.getImportance();
// mailItem.setImportance(OlImportance.olImportanceHigh);
// imp = mailItem.getImportance();
//
// OlSensitivity sen = mailItem.getSensitivity();
// mailItem.setSensitivity(OlSensitivity.olPrivate);
//
// OlFlagIcon flg = mailItem.getFlagIcon();
// mailItem.setFlagIcon(OlFlagIcon.olBlueFlagIcon);
//
// mailItem.setHTMLBody("<html><body><i>hallo mail</i></body></html>");
// mailItem.Display(Boolean.FALSE);
} catch (Throwable e) {
e.printStackTrace();
} finally {
System.gc();
System.gc();
}
}
public void ButtonClicked2(Dispatch ribbonControl) {
System.out.println("ButtonClicked2 " + ribbonControl);
createCustomContactItem();
}
private void createCustomContactItem() {
try {
// http://support.microsoft.com/kb/238755
ContactItem oNewItem = getApplication().CreateItem(OlItemType.olContactItem).as(ContactItem.class);
_Inspector oInsp = oNewItem.getGetInspector();
// Create a new form page called "My Page"
Page oPage = oInsp.getModifiedFormPages().as(PagesImpl.class).Add("My Page").as(Page.class);
// Index Property is declared in the type library but not supported.
// It is also documnented here: http://msdn.microsoft.com/en-us/library/bb176981.aspx
// A VBA script cannot access the Index property too.
// int index = oPage.getIndex();
Control oLabel = oPage.getControls().Add("Forms.Label.1", "lblCompanies", Boolean.TRUE);
placeControl(oLabel, 5, 10, 100, 13);
oLabel._put("Caption", "Companies:");
oInsp.SetCurrentFormPage("My Page");
oNewItem.Display(Boolean.FALSE);
} catch (ComException e) {
e.printStackTrace();
}
}
private void placeControl(Control ctl, int top, int left, int width, int height) throws ComException {
ctl.setLeft(Float.valueOf(left));
ctl.setTop(Float.valueOf(top));
ctl.setWidth(Float.valueOf(width));
ctl.setHeight(Float.valueOf(height));
}
/**
* Ribbon control "checkBox" onAction method has an additional parameter.
* How to synchronized the visibility of the TaskPane with the button? The
* TaskPane could be closed by button X.
*
* @param ribbonControl
* @param pressed
*/
public void ButtonClicked3(final Dispatch ribbonControl, final Boolean pressed) throws ComException {
System.out.println("ButtonClicked3 " + ribbonControl);
if (taskPane1.hasWindow()) {
boolean v = pressed != null ? pressed.booleanValue() : true;
try {
taskPane1.setVisible(v);
} catch (ComException e) {
e.printStackTrace();
}
} else {
Object parentWindow = getApplication().ActiveExplorer();
createTaskPaneWindowAsync(taskPane1, "Hello TaskPane", parentWindow, null);
}
}
public void ButtonClicked4(final Dispatch ribbonControl) {
System.out.println("ButtonClicked4 " + ribbonControl);
if (taskPane1.hasWindow()) {
try {
boolean v = taskPane1.isVisible();
taskPane1.setVisible(!v);
} catch (ComException e) {
e.printStackTrace();
}
} else {
Object parentWindow = getApplication().ActiveExplorer();
createTaskPaneWindowAsync(taskPane1, "Hello TaskPane", parentWindow, (taskPane, ex) -> {
if (ex != null) {
ex.printStackTrace();
}
else {
System.out.println("Task pane added");
}
});
}
}
public void AddTaskPaneClicked(final Dispatch ribbonControl) throws ComException {
System.out.println("AddTaskPaneClicked " + ribbonControl);
Object parentWindow = getApplication().ActiveExplorer();
final TaskPane taskPane = new MyTaskPane();
createTaskPaneWindowAsync(taskPane, "New TaskPane", parentWindow, (succ, ex) -> {
if (ex != null) {
ex.printStackTrace();
}
else {
taskPane.setVisible(true);
System.out.println("Task pane added");
}
});
}
@Override
public void onItemLoad(IDispatch Item) throws ComException {
}
}