Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'json/bundles/org.eclipse.wst.json.core/src/org/eclipse/wst/json/core/internal/schema/catalog/EntryParser.java')
-rw-r--r--json/bundles/org.eclipse.wst.json.core/src/org/eclipse/wst/json/core/internal/schema/catalog/EntryParser.java138
1 files changed, 138 insertions, 0 deletions
diff --git a/json/bundles/org.eclipse.wst.json.core/src/org/eclipse/wst/json/core/internal/schema/catalog/EntryParser.java b/json/bundles/org.eclipse.wst.json.core/src/org/eclipse/wst/json/core/internal/schema/catalog/EntryParser.java
new file mode 100644
index 0000000000..acb659aae8
--- /dev/null
+++ b/json/bundles/org.eclipse.wst.json.core/src/org/eclipse/wst/json/core/internal/schema/catalog/EntryParser.java
@@ -0,0 +1,138 @@
+/*************************************************************************************
+ * Copyright (c) 2014-2015 Red Hat, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * JBoss by Red Hat - Initial implementation.
+ ************************************************************************************/
+package org.eclipse.wst.json.core.internal.schema.catalog;
+
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.Reader;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.util.Collections;
+import java.util.LinkedHashSet;
+import java.util.Set;
+
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBException;
+import javax.xml.bind.Marshaller;
+import javax.xml.bind.Unmarshaller;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+import org.eclipse.wst.json.core.JSONCorePlugin;
+
+@SuppressWarnings("nls")
+public class EntryParser {
+
+ public static final String JSON_CATALOG_ENTRIES = "catalogEntries"; //$NON-NLS-1$
+ private static final JAXBContext jaxbContext;
+
+ static {
+ try {
+ jaxbContext = JAXBContext.newInstance(EntriesWrapper.class);
+ } catch (JAXBException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public Set<UserEntry> parse(String xml) throws CoreException {
+ if (xml == null || xml.trim().isEmpty()) {
+ return null;
+ }
+ try {
+ EntriesWrapper list = (EntriesWrapper) unmarshall(jaxbContext, xml);
+ return list.entries == null ? Collections.<UserEntry>emptySet() : list.entries;
+ } catch (Exception e) {
+ throw new CoreException(new Status(IStatus.ERROR, JSONCorePlugin.PLUGIN_ID,
+ "Unable to parse entry", e));
+ }
+ }
+
+ public String serialize(Set<UserEntry> entries) throws CoreException {
+ try {
+ EntriesWrapper list = new EntriesWrapper();
+ list.entries = entries;
+ Marshaller marshaller = jaxbContext.createMarshaller();
+ marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
+ StringWriter writer = new StringWriter();
+ marshaller.marshal(list, writer);
+ return writer.toString();
+ } catch (Exception shouldntHappen) {
+ throw new CoreException(new Status(IStatus.ERROR, JSONCorePlugin.PLUGIN_ID,
+ "Unable to serialize entries ", shouldntHappen));
+ }
+ }
+
+ public static Set<UserEntry> getUserEntries() {
+ Set<UserEntry> entries = new LinkedHashSet<UserEntry>();
+ IEclipsePreferences prefs = getPreferences();
+ String xml = prefs.get(JSON_CATALOG_ENTRIES, null);
+ if (xml != null && !xml.trim().isEmpty()) {
+ try {
+ Set<UserEntry> set = new EntryParser().parse(xml);
+ if (set != null) {
+ entries.addAll(set);
+ }
+ } catch (CoreException e) {
+ IStatus status = new Status(IStatus.ERROR, JSONCorePlugin.PLUGIN_ID, e
+ .getLocalizedMessage(), e);
+ JSONCorePlugin.getDefault().getLog().log(status);
+ }
+ }
+ return entries;
+ }
+
+ private static IEclipsePreferences getPreferences() {
+ IEclipsePreferences preferences = InstanceScope.INSTANCE
+ .getNode("org.eclipse.wst.json.ui"); //$NON-NLS-1$
+ return preferences;
+ }
+
+ @XmlRootElement(name = "entries")
+ @XmlAccessorType (XmlAccessType.FIELD)
+ static class EntriesWrapper {
+ @XmlElement(name = "entry", type=UserEntry.class)
+ Set<UserEntry> entries;
+ }
+
+ protected Object unmarshall(JAXBContext jaxbContext, String xml) throws JAXBException, IOException, XMLStreamException {
+ return unmarshall(jaxbContext, new StringReader(xml));
+ }
+
+ protected Object unmarshall(JAXBContext jaxbContext, File file) throws JAXBException, IOException, XMLStreamException {
+ return unmarshall(jaxbContext, new FileReader(file));
+ }
+
+ protected Object unmarshall(JAXBContext jaxbContext, Reader reader) throws JAXBException, IOException, XMLStreamException {
+ Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
+ XMLInputFactory xmlif = XMLInputFactory.newInstance();
+ Reader r = null;
+ try {
+ r = reader;
+ XMLStreamReader xmler = xmlif.createXMLStreamReader(r);
+ return jaxbUnmarshaller.unmarshal(xmler);
+ } finally {
+ if (r != null) {
+ r.close();
+ }
+ }
+ }
+}

Back to the top