@@ -6,9 +6,7 @@ | |||||
<children xsi:type="basic:PartSashContainer" xmi:id="_4NsHQEqTEeqT5sxfmvJ5Tg" elementId="xyz.veronie.bgg.ui.partsashcontainer.bggload"> | <children xsi:type="basic:PartSashContainer" xmi:id="_4NsHQEqTEeqT5sxfmvJ5Tg" elementId="xyz.veronie.bgg.ui.partsashcontainer.bggload"> | ||||
<children xsi:type="basic:PartStack" xmi:id="_7KNiwEqTEeqT5sxfmvJ5Tg" elementId="xyz.veronie.bgg.ui.partstack.bggloadconf" containerData="1400"> | <children xsi:type="basic:PartStack" xmi:id="_7KNiwEqTEeqT5sxfmvJ5Tg" elementId="xyz.veronie.bgg.ui.partstack.bggloadconf" containerData="1400"> | ||||
<children xsi:type="basic:Part" xmi:id="_9ocfwEqTEeqT5sxfmvJ5Tg" elementId="xyz.veronie.bgg.ui.part.resultconfig" contributionURI="bundleclass://xyz.veronie.bgg.ui/xyz.veronie.bgg.ui.parts.LoadFromBggPart" label="Prepare"/> | <children xsi:type="basic:Part" xmi:id="_9ocfwEqTEeqT5sxfmvJ5Tg" elementId="xyz.veronie.bgg.ui.part.resultconfig" contributionURI="bundleclass://xyz.veronie.bgg.ui/xyz.veronie.bgg.ui.parts.LoadFromBggPart" label="Prepare"/> | ||||
</children> | |||||
<children xsi:type="basic:PartStack" xmi:id="_7hQw0EqTEeqT5sxfmvJ5Tg" elementId="xyz.veronie.bgg.ui.partstack.bggresult" containerData="600"> | |||||
<children xsi:type="basic:Part" xmi:id="_-Mdy0EqTEeqT5sxfmvJ5Tg" elementId="de.wt.bgg.ui.part.gamesconfig" contributionURI="bundleclass://xyz.veronie.bgg.ui/xyz.veronie.bgg.ui.parts.LoadThingDetailsPart" label="Load game details"/> | |||||
<children xsi:type="basic:Part" xmi:id="_-Mdy0EqTEeqT5sxfmvJ5Tg" elementId="de.wt.bgg.ui.part.gamesconfig" contributionURI="bundleclass://xyz.veronie.bgg.ui/xyz.veronie.bgg.ui.parts.LoadThingDetailsPart" label="Download games"/> | |||||
</children> | </children> | ||||
</children> | </children> | ||||
<children xsi:type="basic:PartSashContainer" xmi:id="_AF1vQEqUEeqT5sxfmvJ5Tg" elementId="xyz.veronie.bgg.ui.partsashcontainer.gamelist"> | <children xsi:type="basic:PartSashContainer" xmi:id="_AF1vQEqUEeqT5sxfmvJ5Tg" elementId="xyz.veronie.bgg.ui.partsashcontainer.gamelist"> | ||||
@@ -20,10 +18,8 @@ | |||||
</children> | </children> | ||||
</children> | </children> | ||||
<mainMenu xmi:id="_wtXeQEs0EeqGDvPDavxXPQ" elementId="org.eclipse.ui.main.menu"/> | <mainMenu xmi:id="_wtXeQEs0EeqGDvPDavxXPQ" elementId="org.eclipse.ui.main.menu"/> | ||||
<trimBars xmi:id="_1nq0UFu3Eeq4377K74W4EQ" elementId="xyz.veronie.bgg.ui.status" side="Bottom"> | |||||
<children xsi:type="menu:ToolBar" xmi:id="_JFF2UFu4Eeq4377K74W4EQ" elementId="xyz.veronie.bgg.ui.toolbar.0"> | |||||
<children xsi:type="menu:ToolControl" xmi:id="_xUKiUFu4Eeq4377K74W4EQ" elementId="xyz.veronie.bgg.ui.toolcontrol.status" contributionURI="bundleclass://xyz.veronie.bgg.ui/xyz.veronie.bgg.ui.parts.StatusBar"/> | |||||
</children> | |||||
<trimBars xmi:id="_I6MLEFv-EeqNgfoocONcgg" elementId="xyz.veronie.bgg.ui.trimbar.bottom" side="Bottom"> | |||||
<children xsi:type="menu:ToolControl" xmi:id="_JQ6B8Fv-EeqNgfoocONcgg" elementId="xyz.veronie.bgg.ui.toolcontrol.status" contributionURI="bundleclass://xyz.veronie.bgg.ui/xyz.veronie.bgg.ui.parts.StatusBar"/> | |||||
</trimBars> | </trimBars> | ||||
</children> | </children> | ||||
<addons xmi:id="_Lw_ZsUqSEeqT5sxfmvJ5Tg" elementId="org.eclipse.e4.core.commands.service" contributionURI="bundleclass://org.eclipse.e4.core.commands/org.eclipse.e4.core.commands.CommandServiceAddon"/> | <addons xmi:id="_Lw_ZsUqSEeqT5sxfmvJ5Tg" elementId="org.eclipse.e4.core.commands.service" contributionURI="bundleclass://org.eclipse.e4.core.commands/org.eclipse.e4.core.commands.CommandServiceAddon"/> | ||||
@@ -3,8 +3,6 @@ Bundle-ManifestVersion: 2 | |||||
Bundle-Name: Secondtry | Bundle-Name: Secondtry | ||||
Bundle-SymbolicName: xyz.veronie.bgg.ui;singleton:=true | Bundle-SymbolicName: xyz.veronie.bgg.ui;singleton:=true | ||||
Bundle-Version: 1.0.0.qualifier | Bundle-Version: 1.0.0.qualifier | ||||
Automatic-Module-Name: de.wt.secondtry | |||||
Bundle-RequiredExecutionEnvironment: JavaSE-1.8 | |||||
Require-Bundle: org.eclipse.core.runtime, | Require-Bundle: org.eclipse.core.runtime, | ||||
org.eclipse.swt, | org.eclipse.swt, | ||||
org.eclipse.e4.core.di, | org.eclipse.e4.core.di, | ||||
@@ -16,5 +14,8 @@ Require-Bundle: org.eclipse.core.runtime, | |||||
org.eclipse.e4.core.services, | org.eclipse.e4.core.services, | ||||
org.eclipse.osgi.services, | org.eclipse.osgi.services, | ||||
javax.inject | javax.inject | ||||
Import-Package: org.eclipse.e4.ui.model.application.descriptor.basic, | |||||
Automatic-Module-Name: de.wt.secondtry | |||||
Bundle-RequiredExecutionEnvironment: JavaSE-1.8 | |||||
Import-Package: javax.inject;version="1.0.0", | |||||
org.eclipse.e4.ui.model.application.descriptor.basic, | |||||
org.eclipse.e4.ui.model.application.ui.basic | org.eclipse.e4.ui.model.application.ui.basic |
@@ -19,6 +19,7 @@ import javax.xml.parsers.DocumentBuilderFactory; | |||||
import javax.xml.parsers.ParserConfigurationException; | import javax.xml.parsers.ParserConfigurationException; | ||||
import org.eclipse.e4.core.di.annotations.Creatable; | import org.eclipse.e4.core.di.annotations.Creatable; | ||||
import org.eclipse.e4.core.services.events.IEventBroker; | |||||
import org.w3c.dom.Document; | import org.w3c.dom.Document; | ||||
import org.w3c.dom.Element; | import org.w3c.dom.Element; | ||||
import org.w3c.dom.Node; | import org.w3c.dom.Node; | ||||
@@ -26,6 +27,7 @@ import org.w3c.dom.NodeList; | |||||
import org.xml.sax.InputSource; | import org.xml.sax.InputSource; | ||||
import org.xml.sax.SAXException; | import org.xml.sax.SAXException; | ||||
import xyz.veronie.bgg.types.EventConstants; | |||||
import xyz.veronie.bgg.types.FilterFlagState; | import xyz.veronie.bgg.types.FilterFlagState; | ||||
import xyz.veronie.bgg.types.Subtype; | import xyz.veronie.bgg.types.Subtype; | ||||
import xyz.veronie.bgg.types.UserFlag; | import xyz.veronie.bgg.types.UserFlag; | ||||
@@ -34,6 +36,7 @@ import xyz.veronie.bgg.types.UserFlag; | |||||
public class BggApi { | public class BggApi { | ||||
@Inject private ResultConfigManager configManager; | @Inject private ResultConfigManager configManager; | ||||
@Inject private IEventBroker eventBroker; | |||||
public static String BASE_URL = "https://www.boardgamegeek.com/xmlapi2/"; | public static String BASE_URL = "https://www.boardgamegeek.com/xmlapi2/"; | ||||
public static String USER = "user"; | public static String USER = "user"; | ||||
@@ -44,7 +47,7 @@ public class BggApi { | |||||
private static int RETRIES = 5; | private static int RETRIES = 5; | ||||
public ArrayList<ThingMetaData> getThingsForUser(String user) { | |||||
public ArrayList<ThingMetaData> getThingsForUser(String user) throws IllegalArgumentException { | |||||
ResultConfig resultConfig = configManager.getResultConfig(); | ResultConfig resultConfig = configManager.getResultConfig(); | ||||
StringBuilder urlStr = new StringBuilder(); | StringBuilder urlStr = new StringBuilder(); | ||||
@@ -81,7 +84,7 @@ public class BggApi { | |||||
} | } | ||||
public ArrayList<ThingMetaData> getThingsForGeeklist(int geeklistId) { | |||||
public ArrayList<ThingMetaData> getThingsForGeeklist(int geeklistId) throws IllegalArgumentException { | |||||
ResultConfig resultConfig = configManager.getResultConfig(); | ResultConfig resultConfig = configManager.getResultConfig(); | ||||
StringBuilder urlStr = new StringBuilder(); | StringBuilder urlStr = new StringBuilder(); | ||||
@@ -90,9 +93,17 @@ public class BggApi { | |||||
return getThings(urlStr.toString()); | return getThings(urlStr.toString()); | ||||
} | } | ||||
public ArrayList<ThingMetaData> getThingsForFamily(int familyId) throws IllegalArgumentException { | |||||
ResultConfig resultConfig = configManager.getResultConfig(); | |||||
StringBuilder urlStr = new StringBuilder(); | |||||
urlStr.append(BASE_URL + FAMILY + "?id=" + String.valueOf(resultConfig.familyId)); | |||||
return getThings(urlStr.toString()); | |||||
} | |||||
private ArrayList<ThingMetaData> getThings(String urlString) { | |||||
private ArrayList<ThingMetaData> getThings(String urlString) throws IllegalArgumentException { | |||||
System.out.println("URL: " + urlString); | System.out.println("URL: " + urlString); | ||||
try { | try { | ||||
@@ -105,10 +116,10 @@ public class BggApi { | |||||
int status = con.getResponseCode(); | int status = con.getResponseCode(); | ||||
if(status == HttpURLConnection.HTTP_ACCEPTED) { | if(status == HttpURLConnection.HTTP_ACCEPTED) { | ||||
Thread.sleep(2000); | Thread.sleep(2000); | ||||
System.out.println("Waiting for server to prepare result..."); | |||||
eventBroker.send(EventConstants.TOPIC_STATUS, "Waiting for server to prepare result..."); | |||||
} | } | ||||
else if(status != HttpURLConnection.HTTP_OK) { | else if(status != HttpURLConnection.HTTP_OK) { | ||||
System.out.println("Http Response: " + status); | |||||
eventBroker.send(EventConstants.TOPIC_STATUS, "Http Response: " + status); | |||||
con.disconnect(); | con.disconnect(); | ||||
return null; | return null; | ||||
} else { | } else { | ||||
@@ -131,13 +142,13 @@ public class BggApi { | |||||
++retry; | ++retry; | ||||
} while (retry < RETRIES); | } while (retry < RETRIES); | ||||
} | } | ||||
catch (MalformedURLException e) { | catch (MalformedURLException e) { | ||||
System.out.println("[ERROR] Malformed URL: " + urlString); | |||||
eventBroker.send(EventConstants.TOPIC_STATUS, "[ERROR] Malformed URL: " + urlString); | |||||
e.printStackTrace(); | e.printStackTrace(); | ||||
} catch (IOException e) { | } catch (IOException e) { | ||||
System.out.println("[ERROR] Could not open connection for URL: " + urlString); | |||||
eventBroker.send(EventConstants.TOPIC_STATUS, "[ERROR] Could not open connection for URL: " + urlString); | |||||
e.printStackTrace(); | e.printStackTrace(); | ||||
} catch (InterruptedException e) { | } catch (InterruptedException e) { | ||||
// this will not happen, but we have to catch it anyways... | // this will not happen, but we have to catch it anyways... | ||||
@@ -149,7 +160,7 @@ public class BggApi { | |||||
private ArrayList<ThingMetaData> parseThingMetas(String content) { | |||||
private ArrayList<ThingMetaData> parseThingMetas(String content) throws IllegalArgumentException { | |||||
ArrayList<ThingMetaData> metas = new ArrayList<ThingMetaData>(); | ArrayList<ThingMetaData> metas = new ArrayList<ThingMetaData>(); | ||||
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); | DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); | ||||
@@ -161,6 +172,8 @@ public class BggApi { | |||||
Document doc = builder.parse(is); | Document doc = builder.parse(is); | ||||
Element root = doc.getDocumentElement(); | Element root = doc.getDocumentElement(); | ||||
checkForErrors(doc); | |||||
// BGG XMLAPI2 | // BGG XMLAPI2 | ||||
if(root.getTagName() == "items") { | if(root.getTagName() == "items") { | ||||
NodeList nList = doc.getElementsByTagName("item"); | NodeList nList = doc.getElementsByTagName("item"); | ||||
@@ -180,8 +193,21 @@ public class BggApi { | |||||
} | } | ||||
} | } | ||||
} | } | ||||
// for geeklist result (XMLAPI) | |||||
// for geeklist result | |||||
else if(root.getTagName() == "geeklist") { | else if(root.getTagName() == "geeklist") { | ||||
StringBuilder gInfo = new StringBuilder(); | |||||
NodeList nListTitle = doc.getElementsByTagName("title"); | |||||
if(nListTitle.getLength() > 0) { | |||||
gInfo.append(nListTitle.item(0).getTextContent() + "\r\n"); | |||||
} | |||||
NodeList nListDesc = doc.getElementsByTagName("description"); | |||||
if(nListDesc.getLength() > 0) { | |||||
gInfo.append(nListDesc.item(0).getTextContent()); | |||||
} | |||||
eventBroker.send(EventConstants.TOPIC_GEEKLIST_INFO, gInfo.toString()); | |||||
NodeList nList = doc.getElementsByTagName("item"); | NodeList nList = doc.getElementsByTagName("item"); | ||||
for(int i = 0; i < nList.getLength(); i++) { | for(int i = 0; i < nList.getLength(); i++) { | ||||
Node nNode = nList.item(i); | Node nNode = nList.item(i); | ||||
@@ -211,6 +237,19 @@ public class BggApi { | |||||
return null; | return null; | ||||
} | } | ||||
private void checkForErrors(Document doc) throws IllegalArgumentException { | |||||
NodeList nList = doc.getElementsByTagName("error"); | |||||
if(nList.getLength() > 0) { | |||||
Element el = (Element)nList.item(0); | |||||
String val = getValue(el, "message"); | |||||
if(val.equals("")) { | |||||
val = el.getAttribute("message"); | |||||
} | |||||
throw new IllegalArgumentException(val); | |||||
} | |||||
} | |||||
private String getValue(Element eElement, String key) { | private String getValue(Element eElement, String key) { | ||||
Node node = eElement.getElementsByTagName(key).item(0); | Node node = eElement.getElementsByTagName(key).item(0); | ||||
if(node == null) { | if(node == null) { | ||||
@@ -22,4 +22,6 @@ public interface EventConstants { | |||||
String TOPIC_STATUS = "STATUS"; | String TOPIC_STATUS = "STATUS"; | ||||
String TOPIC_GEEKLIST_INFO = "INFO/GEEKLIST"; | |||||
} | } |
@@ -117,6 +117,8 @@ public class BggUserSourceFilter { | |||||
makeFilter(parent, UserFlag.PLAYED); | makeFilter(parent, UserFlag.PLAYED); | ||||
parent.pack(); | |||||
parent.getParent().pack(); | |||||
parent.layout(); | parent.layout(); | ||||
} | } | ||||
@@ -3,9 +3,12 @@ package xyz.veronie.bgg.ui.filters; | |||||
import javax.inject.Inject; | import javax.inject.Inject; | ||||
import org.eclipse.e4.core.di.annotations.Creatable; | import org.eclipse.e4.core.di.annotations.Creatable; | ||||
import org.eclipse.e4.core.di.annotations.Optional; | |||||
import org.eclipse.e4.core.services.events.IEventBroker; | import org.eclipse.e4.core.services.events.IEventBroker; | ||||
import org.eclipse.e4.ui.di.UIEventTopic; | |||||
import org.eclipse.jface.dialogs.MessageDialog; | import org.eclipse.jface.dialogs.MessageDialog; | ||||
import org.eclipse.swt.SWT; | import org.eclipse.swt.SWT; | ||||
import org.eclipse.swt.custom.StyledText; | |||||
import org.eclipse.swt.events.FocusEvent; | import org.eclipse.swt.events.FocusEvent; | ||||
import org.eclipse.swt.events.FocusListener; | import org.eclipse.swt.events.FocusListener; | ||||
import org.eclipse.swt.events.SelectionAdapter; | import org.eclipse.swt.events.SelectionAdapter; | ||||
@@ -26,7 +29,7 @@ public class GeeklistSourceFilter { | |||||
@Inject private IEventBroker eventBroker; | @Inject private IEventBroker eventBroker; | ||||
@Inject private ResultConfigManager configManager; | @Inject private ResultConfigManager configManager; | ||||
private Label confLabel; | |||||
private StyledText confLabel; | |||||
public void create(Composite parent, int style) { | public void create(Composite parent, int style) { | ||||
GridLayout filterLayout = new GridLayout(2, false); | GridLayout filterLayout = new GridLayout(2, false); | ||||
@@ -69,21 +72,33 @@ public class GeeklistSourceFilter { | |||||
} | } | ||||
}); | }); | ||||
confLabel = new Label(parent, SWT.LEFT); | |||||
confLabel = new StyledText(parent, SWT.MULTI | SWT.WRAP | SWT.READ_ONLY); | |||||
confLabel.setText(""); | confLabel.setText(""); | ||||
GridData gd = new GridData(SWT.FILL, SWT.FILL, false, false); | |||||
confLabel.setWordWrap(true); | |||||
confLabel.setBounds(10,10,100,100); | |||||
GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true); | |||||
gd.horizontalSpan = 2; | gd.horizontalSpan = 2; | ||||
confLabel.setLayoutData(gd); | confLabel.setLayoutData(gd); | ||||
parent.pack(); | |||||
parent.getParent().pack(); | |||||
parent.layout(); | parent.layout(); | ||||
} | } | ||||
public void setGeeklistId(Integer geeklistId) { | public void setGeeklistId(Integer geeklistId) { | ||||
if(eventBroker != null) { | if(eventBroker != null) { | ||||
eventBroker.post(EventConstants.TOPIC_GEEKLIST_CHANGED, geeklistId); | eventBroker.post(EventConstants.TOPIC_GEEKLIST_CHANGED, geeklistId); | ||||
confLabel.setText("Geeklist #" + geeklistId); | |||||
//confLabel.setText("Geeklist #" + geeklistId); | |||||
} else { | } else { | ||||
System.out.println("setGeeklistId: eventBroker is null."); | System.out.println("setGeeklistId: eventBroker is null."); | ||||
} | } | ||||
} | } | ||||
@Inject | |||||
@Optional | |||||
private void subscribeTopicGeeklistInfo | |||||
(@UIEventTopic(EventConstants.TOPIC_GEEKLIST_INFO) | |||||
String geeklistInfo) { | |||||
confLabel.setText(geeklistInfo); | |||||
} | |||||
} | } |
@@ -157,22 +157,26 @@ public class LoadFromBggPart { | |||||
btDownload.addSelectionListener(new SelectionAdapter() { | btDownload.addSelectionListener(new SelectionAdapter() { | ||||
@Override | @Override | ||||
public void widgetSelected(SelectionEvent e) { | public void widgetSelected(SelectionEvent e) { | ||||
eventBroker.send(EventConstants.TOPIC_STATUS, "Fetching " + cbSource.getSelection().toString()); | |||||
ResultConfig resultConfig = configManager.getResultConfig(); | ResultConfig resultConfig = configManager.getResultConfig(); | ||||
IStructuredSelection selection = (IStructuredSelection) cbSource.getSelection(); | IStructuredSelection selection = (IStructuredSelection) cbSource.getSelection(); | ||||
if(selection.size() == 0) return; | if(selection.size() == 0) return; | ||||
if(selection.getFirstElement() == SourceFilter.BGG_USER) { | if(selection.getFirstElement() == SourceFilter.BGG_USER) { | ||||
String user = resultConfig.user; | String user = resultConfig.user; | ||||
if(user == null || user.isEmpty()) { | if(user == null || user.isEmpty()) { | ||||
MessageDialog.openError(main.getShell(), "", "Please enter a user name."); | MessageDialog.openError(main.getShell(), "", "Please enter a user name."); | ||||
return; | return; | ||||
} else { | } else { | ||||
System.out.println("...for user '" + user + "'"); | |||||
ArrayList<ThingMetaData> thingMetas = bggApi.getThingsForUser(user); | |||||
ThingProvider.INSTANCE.setThingMetas(thingMetas); | |||||
eventBroker.send(EventConstants.TOPIC_RESULT_CHANGED, ""); | |||||
eventBroker.send(EventConstants.TOPIC_STATUS, "Fetching " + selection.getFirstElement().toString() + " '" + user + "'..."); | |||||
try { | |||||
ArrayList<ThingMetaData> thingMetas = bggApi.getThingsForUser(user); | |||||
ThingProvider.INSTANCE.setThingMetas(thingMetas); | |||||
eventBroker.send(EventConstants.TOPIC_RESULT_CHANGED, ""); | |||||
} | |||||
catch(IllegalArgumentException ex) { | |||||
MessageDialog.openError(main.getShell(), "", ex.getMessage()); | |||||
} | |||||
} | } | ||||
} else if(selection.getFirstElement() == SourceFilter.GEEKLIST) { | } else if(selection.getFirstElement() == SourceFilter.GEEKLIST) { | ||||
@@ -181,21 +185,31 @@ public class LoadFromBggPart { | |||||
MessageDialog.openError(main.getShell(), "", "Please enter a geeklist id."); | MessageDialog.openError(main.getShell(), "", "Please enter a geeklist id."); | ||||
return; | return; | ||||
} else { | } else { | ||||
System.out.println("...for geeklist id '" + geeklistId + "'"); | |||||
ArrayList<ThingMetaData> thingMetas = bggApi.getThingsForGeeklist(geeklistId); | |||||
ThingProvider.INSTANCE.setThingMetas(thingMetas); | |||||
eventBroker.send(EventConstants.TOPIC_RESULT_CHANGED, ""); | |||||
eventBroker.send(EventConstants.TOPIC_STATUS, "Fetching for geeklist id '" + geeklistId + "'"); | |||||
try { | |||||
ArrayList<ThingMetaData> thingMetas = bggApi.getThingsForGeeklist(geeklistId); | |||||
ThingProvider.INSTANCE.setThingMetas(thingMetas); | |||||
eventBroker.send(EventConstants.TOPIC_RESULT_CHANGED, ""); | |||||
} | |||||
catch(IllegalArgumentException ex) { | |||||
MessageDialog.openError(main.getShell(), "", ex.getMessage()); | |||||
} | |||||
} | } | ||||
} else if(selection.getFirstElement() == SourceFilter.FAMILY) { | } else if(selection.getFirstElement() == SourceFilter.FAMILY) { | ||||
Integer familyId = resultConfig.familyId; | Integer familyId = resultConfig.familyId; | ||||
if(familyId == null) { | if(familyId == null) { | ||||
System.out.println("Please enter a family id."); | |||||
MessageDialog.openError(main.getShell(), "", "Please enter a family id."); | |||||
return; | return; | ||||
} else { | } else { | ||||
System.out.println("...for family id '" + familyId + "'"); | |||||
//ArrayList<ThingMetaData> thingMetas = bggApi.getThingsForFamily(familyId); | |||||
//ThingProvider.INSTANCE.setThingMetas(thingMetas); | |||||
//eventBroker.send(EventConstants.TOPIC_RESULT_CHANGED, ""); | |||||
eventBroker.send(EventConstants.TOPIC_STATUS, "Fetching for family id '" + familyId + "'"); | |||||
try { | |||||
ArrayList<ThingMetaData> thingMetas = bggApi.getThingsForFamily(familyId); | |||||
ThingProvider.INSTANCE.setThingMetas(thingMetas); | |||||
eventBroker.send(EventConstants.TOPIC_RESULT_CHANGED, ""); | |||||
} | |||||
catch(IllegalArgumentException ex) { | |||||
MessageDialog.openError(main.getShell(), "", ex.getMessage()); | |||||
} | |||||
} | } | ||||
} | } | ||||
} | } | ||||
@@ -4,16 +4,26 @@ package xyz.veronie.bgg.ui.parts; | |||||
import javax.annotation.PostConstruct; | import javax.annotation.PostConstruct; | ||||
import javax.inject.Inject; | import javax.inject.Inject; | ||||
import org.eclipse.e4.core.di.annotations.Creatable; | |||||
import org.eclipse.e4.core.di.annotations.Optional; | import org.eclipse.e4.core.di.annotations.Optional; | ||||
import org.eclipse.e4.ui.di.UIEventTopic; | import org.eclipse.e4.ui.di.UIEventTopic; | ||||
import org.eclipse.jface.resource.ColorDescriptor; | |||||
import org.eclipse.jface.resource.DeviceResourceException; | |||||
import org.eclipse.jface.resource.JFaceResources; | |||||
import org.eclipse.jface.resource.LocalResourceManager; | |||||
import org.eclipse.jface.resource.ResourceManager; | |||||
import org.eclipse.swt.SWT; | import org.eclipse.swt.SWT; | ||||
import org.eclipse.swt.graphics.Color; | |||||
import org.eclipse.swt.graphics.Device; | |||||
import org.eclipse.swt.graphics.RGB; | |||||
import org.eclipse.swt.layout.FillLayout; | |||||
import org.eclipse.swt.layout.GridData; | |||||
import org.eclipse.swt.layout.GridLayout; | |||||
import org.eclipse.swt.widgets.Composite; | import org.eclipse.swt.widgets.Composite; | ||||
import org.eclipse.swt.widgets.Label; | import org.eclipse.swt.widgets.Label; | ||||
import xyz.veronie.bgg.types.EventConstants; | import xyz.veronie.bgg.types.EventConstants; | ||||
@Creatable | |||||
public class StatusBar { | public class StatusBar { | ||||
private Label statusLabel; | private Label statusLabel; | ||||
@@ -22,9 +32,15 @@ public class StatusBar { | |||||
@PostConstruct | @PostConstruct | ||||
public void createControls(Composite parent) { | public void createControls(Composite parent) { | ||||
main = new Composite(parent, SWT.FILL); | main = new Composite(parent, SWT.FILL); | ||||
main.setLayout(new GridLayout()); | |||||
statusLabel = new Label(main, SWT.FILL); | statusLabel = new Label(main, SWT.FILL); | ||||
statusLabel.setText("ASDF"); | |||||
statusLabel.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); | |||||
// create the manager and bind to a widget | |||||
ResourceManager resManager = | |||||
new LocalResourceManager(JFaceResources.getResources(), statusLabel); | |||||
statusLabel.setBackground(resManager.createColor(new RGB(255,255,0))); | |||||
} | } | ||||
@@ -34,7 +50,8 @@ public class StatusBar { | |||||
(@UIEventTopic(EventConstants.TOPIC_STATUS) | (@UIEventTopic(EventConstants.TOPIC_STATUS) | ||||
String text) { | String text) { | ||||
statusLabel.setText(text); | statusLabel.setText(text); | ||||
main.layout(); | |||||
statusLabel.computeSize(SWT.DEFAULT, SWT.DEFAULT, true); | |||||
statusLabel.getParent().pack(); | |||||
System.out.println("Status: " + text); | System.out.println("Status: " + text); | ||||
} | } | ||||
} | } |