You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by se...@apache.org on 2011/02/04 18:34:28 UTC
svn commit: r1067233 [4/7] - in /cxf/trunk:
distribution/src/main/release/samples/
distribution/src/main/release/samples/logbrowser/
distribution/src/main/release/samples/logbrowser/src/
distribution/src/main/release/samples/logbrowser/src/demo/ distri...
Added: cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/event/SignOutEventHandler.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/event/SignOutEventHandler.java?rev=1067233&view=auto
==============================================================================
--- cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/event/SignOutEventHandler.java (added)
+++ cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/event/SignOutEventHandler.java Fri Feb 4 17:34:24 2011
@@ -0,0 +1,26 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.management.web.browser.client.event;
+
+import com.google.gwt.event.shared.EventHandler;
+
+public interface SignOutEventHandler extends EventHandler {
+ void onSignOut(SignOutEvent event);
+}
Propchange: cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/event/SignOutEventHandler.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/event/SignOutEventHandler.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/AbstractCallback.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/AbstractCallback.java?rev=1067233&view=auto
==============================================================================
--- cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/AbstractCallback.java (added)
+++ cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/AbstractCallback.java Fri Feb 4 17:34:24 2011
@@ -0,0 +1,55 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.management.web.browser.client.service;
+
+import javax.annotation.Nonnull;
+
+import com.google.gwt.http.client.Request;
+import com.google.gwt.http.client.RequestCallback;
+import com.google.gwt.http.client.Response;
+
+public abstract class AbstractCallback<T> implements RequestCallback {
+ private static final int OK = 200;
+ private static final int UNAUTHORIZED = 401;
+
+ public void onResponseReceived(@Nonnull final Request request, @Nonnull final Response response) {
+ if (OK == response.getStatusCode()) {
+ onSuccess(parse(response));
+ } else if (UNAUTHORIZED == response.getStatusCode()) {
+ onAccessDenied();
+ } else {
+
+ // TODO add custom exception
+ onError(request, new RuntimeException("Undefined remote service error"));
+ }
+ }
+
+ public void onError(final Request request, final Throwable ex) {
+
+ // TODO add custom exception
+ throw new RuntimeException(ex);
+ }
+
+ public abstract void onAccessDenied();
+
+ public abstract void onSuccess(T obj);
+
+ protected abstract T parse(Response response);
+}
Propchange: cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/AbstractCallback.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/AbstractCallback.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/browser/Entry.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/browser/Entry.java?rev=1067233&view=auto
==============================================================================
--- cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/browser/Entry.java (added)
+++ cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/browser/Entry.java Fri Feb 4 17:34:24 2011
@@ -0,0 +1,218 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.management.web.browser.client.service.browser;
+
+import java.util.Date;
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
+import com.google.gwt.i18n.client.DateTimeFormat;
+import com.google.gwt.xml.client.Element;
+import com.google.gwt.xml.client.Node;
+import com.google.gwt.xml.client.NodeList;
+
+import static com.google.gwt.xml.client.Node.*;
+
+/**
+ * The class represents log record, which is parsed from DOM representation of {@link LogRecord}.
+ * <p/>
+ * Log record is single piece of information log by logger. For example:
+ * <code>
+ * <p/>
+ * </code>
+ *
+ * @see FeedProxy
+ */
+public class Entry {
+
+ /**
+ * short message
+ */
+ private String title;
+
+ /**
+ * long message
+ */
+ private String message;
+
+ /**
+ * level: 'DEBUG', 'INFO', 'WARN', 'ERROR'
+ */
+ private String level;
+
+ /**
+ * error message and stack trace related with occured exception
+ */
+ private String throwable;
+
+ /**
+ * date of occured
+ */
+ private Date eventTimestamp;
+
+ @Nonnull
+ private final LazyXmlParser xmlParser;
+
+ /**
+ * Constructs a new <code>Entry</code> by convert DOM representation.
+ *
+ * @param entryNode XML node which represent entry (nonnull);
+ */
+ public Entry(@Nonnull final Node entryNode) {
+ xmlParser = new LazyXmlParser(entryNode);
+ }
+
+ /**
+ * Returns short message of the log record.
+ *
+ * @return short message (nonull)
+ */
+ @Nonnull
+ public String getTitle() {
+ if (title == null) {
+ title = avoidNull(xmlParser.getTitle());
+ }
+ return title;
+ }
+
+ /**
+ * Returns long message of the log record.
+ *
+ * @return long message (nonull)
+ */
+ @Nonnull
+ public String getMessage() {
+ if (message == null) {
+ message = avoidNull(xmlParser.getMessage());
+ }
+ return message;
+ }
+
+ /**
+ * Returns level of the log record. Possible values: 'DEBUG', 'INFO', 'WARN', 'ERROR'.
+ *
+ * @return level (nonull)
+ */
+ @Nonnull
+ public String getLevel() {
+ if (level == null) {
+ level = avoidNull(xmlParser.getLevel());
+ }
+
+ return level;
+ }
+
+ /**
+ * Returns error message and stack trace related with occured exception.
+ *
+ * @return error message and stack trace (nonull)
+ */
+ @Nonnull
+ public String getThrowable() {
+ if (throwable == null) {
+ throwable = avoidNull(xmlParser.getThrowable());
+ }
+ return throwable;
+ }
+
+ @Nullable
+ public Date getEventTimestamp() {
+ if (eventTimestamp == null) {
+ eventTimestamp = xmlParser.getEventTimestamp();
+ }
+ return eventTimestamp != null ? (Date)eventTimestamp.clone() : null;
+ }
+
+ @Nonnull
+ private String avoidNull(@Nullable final String value) {
+ return value != null ? value : "";
+ }
+
+ private static class LazyXmlParser {
+ private static final String TITLE_TAG = "title";
+ private static final String MESSAGE_TAG = "message";
+ private static final String LEVEL_TAG = "level";
+ private static final String THROWABLE_TAG = "throwable";
+ private static final String EVENT_TIMESTAMP_TAG = "eventTimestamp";
+
+ private static final DateTimeFormat DATETIME_FORMATTER =
+ DateTimeFormat.getFormat("yyyy-MM-ddTHH:mm:ss'.'SSSZ");
+
+ @Nonnull
+ private final Node entryNode;
+
+ public LazyXmlParser(@Nonnull final Node entryNode) {
+ assert "entry".equals(entryNode.getNodeName());
+ assert entryNode.getNodeType() == ELEMENT_NODE;
+
+ this.entryNode = entryNode;
+ }
+
+ @Nullable
+ private String getTagValue(@Nonnull final String tagName) {
+ Node node = getUniqueElementByTagName(tagName);
+
+ return node != null ? getTextValue(node) : null;
+ }
+
+ @Nullable
+ private Node getUniqueElementByTagName(@Nonnull final String tagName) {
+ NodeList nodes = ((Element)entryNode).getElementsByTagName(tagName);
+ return nodes.getLength() == 1 ? nodes.item(0) : null;
+ }
+
+ @Nullable
+ private String getTextValue(@Nonnull final Node node) {
+ Node child = node.getFirstChild();
+
+ if (child != null && child.getNodeType() == TEXT_NODE) {
+ return child.getNodeValue();
+ }
+
+ return null;
+ }
+
+ @Nullable
+ public String getTitle() {
+ return getTagValue(TITLE_TAG);
+ }
+
+ @Nullable
+ public String getMessage() {
+ return getTagValue(MESSAGE_TAG);
+ }
+
+ @Nullable
+ public String getLevel() {
+ return getTagValue(LEVEL_TAG);
+ }
+
+ @Nullable
+ public String getThrowable() {
+ return getTagValue(THROWABLE_TAG);
+ }
+
+ @Nullable
+ public Date getEventTimestamp() {
+ String value = getTagValue(EVENT_TIMESTAMP_TAG);
+ return value != null ? DATETIME_FORMATTER.parse(value) : null;
+ }
+ }
+}
Propchange: cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/browser/Entry.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/browser/Entry.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/browser/Feed.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/browser/Feed.java?rev=1067233&view=auto
==============================================================================
--- cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/browser/Feed.java (added)
+++ cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/browser/Feed.java Fri Feb 4 17:34:24 2011
@@ -0,0 +1,88 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.management.web.browser.client.service.browser;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import javax.annotation.Nonnull;
+
+import com.google.gwt.xml.client.Document;
+import com.google.gwt.xml.client.Node;
+import com.google.gwt.xml.client.NodeList;
+
+import static com.google.gwt.xml.client.Node.ELEMENT_NODE;
+
+public class Feed {
+ public static final Feed EMPTY = new Feed();
+
+ @Nonnull
+ private final List<Entry> entries;
+
+ @Nonnull
+ private final Links links;
+
+ private Feed() {
+ entries = new ArrayList<Entry>();
+ links = Links.EMPTY;
+ }
+
+ public Feed(@Nonnull final Document document) {
+ entries = new ArrayList<Entry>();
+ new XmlParser().parseEntries(document);
+
+ links = new Links(document);
+ }
+
+ @Nonnull
+ public List<Entry> getEntries() {
+ return entries;
+ }
+
+ @Nonnull
+ public Links getLinks() {
+ return links;
+ }
+
+ private final class XmlParser {
+ private static final String ENTRY_TAG = "entry";
+
+ private XmlParser() {
+ }
+
+ private void parseEntries(@Nonnull final Document document) {
+ NodeList entryNodes = document.getElementsByTagName(ENTRY_TAG);
+
+ if (entryNodes != null) {
+ Node entryNode;
+ for (int i = 0; i < entryNodes.getLength(); i++) {
+ entryNode = entryNodes.item(i);
+ assert entryNode != null;
+
+ if (entryNode.getNodeType() == ELEMENT_NODE) {
+ entries.add(new Entry(entryNodes.item(i)));
+ }
+ }
+ Collections.reverse(entries);
+ }
+ }
+ }
+}
Propchange: cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/browser/Feed.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/browser/Feed.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/browser/FeedProxy.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/browser/FeedProxy.java?rev=1067233&view=auto
==============================================================================
--- cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/browser/FeedProxy.java (added)
+++ cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/browser/FeedProxy.java Fri Feb 4 17:34:24 2011
@@ -0,0 +1,26 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.management.web.browser.client.service.browser;
+
+import com.google.gwt.http.client.RequestCallback;
+
+public interface FeedProxy {
+ void getFeed(String url, RequestCallback callback);
+}
Propchange: cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/browser/FeedProxy.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/browser/FeedProxy.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/browser/FeedProxyImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/browser/FeedProxyImpl.java?rev=1067233&view=auto
==============================================================================
--- cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/browser/FeedProxyImpl.java (added)
+++ cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/browser/FeedProxyImpl.java Fri Feb 4 17:34:24 2011
@@ -0,0 +1,86 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.management.web.browser.client.service.browser;
+
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
+import com.google.gwt.http.client.RequestBuilder;
+import com.google.gwt.http.client.RequestCallback;
+import com.google.gwt.http.client.RequestException;
+import com.google.gwt.http.client.Response;
+import com.google.gwt.xml.client.Document;
+import com.google.gwt.xml.client.XMLParser;
+
+import static com.google.gwt.http.client.RequestBuilder.GET;
+import static com.google.gwt.http.client.RequestBuilder.Method;
+
+import org.apache.cxf.management.web.browser.client.service.AbstractCallback;
+
+public class FeedProxyImpl implements FeedProxy {
+ private static final String CONTENT_TYPE_HEADER = "Content-Type";
+ private static final String ACCEPT_HEADER = "Accept";
+ private static final String ATOM_TYPE = "application/atom+xml";
+
+ public void getFeed(@Nonnull final String url, @Nonnull final RequestCallback callback) {
+ RequestBuilder builder = buildRequest(GET, url);
+
+ try {
+ builder.sendRequest(null, callback);
+ } catch (RequestException ex) {
+
+ // TODO add custom exception
+ throw new RuntimeException(ex);
+ }
+ }
+
+ @Nonnull
+ private RequestBuilder buildRequest(@Nonnull final Method method, @Nonnull final String url) {
+ assert !"".equals(url);
+
+ RequestBuilder builder = new RequestBuilder(method, url);
+ builder.setHeader(CONTENT_TYPE_HEADER, ATOM_TYPE);
+ builder.setHeader(ACCEPT_HEADER, ATOM_TYPE);
+
+ return builder;
+ }
+
+ public abstract static class Callback extends AbstractCallback<Feed> {
+
+ @Override @Nonnull
+ protected Feed parse(@Nonnull final Response response) {
+ Document document = convertFromXML(response);
+ if (document != null) {
+ return new Feed(document);
+ } else {
+ return Feed.EMPTY;
+ }
+ }
+
+ @Nullable
+ private Document convertFromXML(@Nonnull final Response response) {
+ if (response.getText() != null) {
+ return XMLParser.parse(response.getText());
+ } else {
+ return null;
+ }
+ }
+ }
+}
Propchange: cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/browser/FeedProxyImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/browser/FeedProxyImpl.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/browser/Links.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/browser/Links.java?rev=1067233&view=auto
==============================================================================
--- cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/browser/Links.java (added)
+++ cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/browser/Links.java Fri Feb 4 17:34:24 2011
@@ -0,0 +1,159 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.management.web.browser.client.service.browser;
+
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
+import com.google.gwt.xml.client.Document;
+import com.google.gwt.xml.client.Node;
+import com.google.gwt.xml.client.NodeList;
+
+public class Links {
+ public static final Links EMPTY = new Links();
+
+ @Nullable
+ private String first;
+
+ @Nullable
+ private String previous;
+
+ @Nullable
+ private String self;
+
+ @Nullable
+ private String next;
+
+ @Nullable
+ private String last;
+
+ private Links() {
+ }
+
+ public Links(@Nonnull final Document document) {
+ new XmlParser().parseLinks(document);
+ }
+
+ public boolean firstAvailable() {
+ return available(first);
+ }
+
+ public boolean previousAvailable() {
+ return available(previous);
+ }
+
+ public boolean selfAvailable() {
+ return available(self);
+ }
+
+ public boolean nextAvailable() {
+ return available(next);
+ }
+
+ public boolean lastAvailable() {
+ return available(last);
+ }
+
+ @Nullable
+ public String getFirst() {
+ return first;
+ }
+
+ @Nullable
+ public String getPrevious() {
+ return previous;
+ }
+
+ @Nullable
+ public String getSelf() {
+ return self;
+ }
+
+ @Nullable
+ public String getNext() {
+ return next;
+ }
+
+ @Nullable
+ public String getLast() {
+ return last;
+ }
+
+ private boolean available(@Nullable final String link) {
+ return link != null && !"".equals(link);
+ }
+
+ private final class XmlParser {
+ private static final String FEED_TAG = "feed";
+ private static final String LINK_TAG = "link";
+
+ private static final String TYPE_ATTRIBUTE = "rel";
+ private static final String URL_ATTRIBUTE = "href";
+
+ private static final String FIRST_LINK = "first";
+ private static final String PREVIOUS_LINK = "previous";
+ private static final String SELF_LINK = "self";
+ private static final String NEXT_LINK = "next";
+ private static final String LAST_LINK = "last";
+
+ private XmlParser() {
+ }
+
+ private void parseLinks(@Nonnull final Document document) {
+ NodeList linkNodes = document.getElementsByTagName(LINK_TAG);
+
+ if (linkNodes != null) {
+ Node linkNode;
+ for (int i = 0; i < linkNodes.getLength(); i++) {
+ linkNode = linkNodes.item(i);
+ if (isLinkBelongToFeed(linkNode)) {
+ setLink(linkNode);
+ }
+ }
+ }
+ }
+
+ private boolean isLinkBelongToFeed(@Nonnull final Node node) {
+ return node.getParentNode() != null && FEED_TAG.equals(node.getParentNode().getNodeName());
+ }
+
+ private void setLink(@Nonnull final Node node) {
+ Node typeNode = node.getAttributes().getNamedItem(TYPE_ATTRIBUTE);
+ Node urlNode = node.getAttributes().getNamedItem(URL_ATTRIBUTE);
+
+ if (typeNode != null && urlNode != null) {
+ String typeValue = typeNode.getNodeValue();
+ String urlValue = urlNode.getNodeValue();
+
+ if (FIRST_LINK.equals(typeValue)) {
+ first = urlValue;
+ } else if (PREVIOUS_LINK.equals(typeValue)) {
+ previous = urlValue;
+ } else if (SELF_LINK.equals(typeValue)) {
+ self = urlValue;
+ } else if (NEXT_LINK.equals(typeValue)) {
+ next = urlValue;
+ } else if (LAST_LINK.equals(typeValue)) {
+ last = urlValue;
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
Propchange: cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/browser/Links.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/browser/Links.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/Base64.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/Base64.java?rev=1067233&view=auto
==============================================================================
--- cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/Base64.java (added)
+++ cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/Base64.java Fri Feb 4 17:34:24 2011
@@ -0,0 +1,79 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.management.web.browser.client.service.settings;
+
+//TODO this class isn't mine write appropriate comment
+
+/**
+ * Custom Base64 encode/decode implementation suitable for use in GWT applications
+ * (uses only translatable classes).
+ */
+public final class Base64 {
+
+ private static final String ETAB = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
+
+ private Base64() {
+ }
+
+ public static String encode(String data) {
+ StringBuffer out = new StringBuffer();
+
+ int i = 0;
+ int r = data.length();
+ while (r > 0) {
+ byte d0;
+ byte d1;
+ byte d2;
+ byte e0;
+ byte e1;
+ byte e2;
+ byte e3;
+
+ d0 = (byte)data.charAt(i++);
+ --r;
+ e0 = (byte)(d0 >>> 2);
+ e1 = (byte)((d0 & 0x03) << 4);
+
+ if (r > 0) {
+ d1 = (byte)data.charAt(i++);
+ --r;
+ e1 += (byte)(d1 >>> 4);
+ e2 = (byte)((d1 & 0x0f) << 2);
+ } else {
+ e2 = 64;
+ }
+
+ if (r > 0) {
+ d2 = (byte)data.charAt(i++);
+ --r;
+ e2 += (byte)(d2 >>> 6);
+ e3 = (byte)(d2 & 0x3f);
+ } else {
+ e3 = 64;
+ }
+ out.append(ETAB.charAt(e0));
+ out.append(ETAB.charAt(e1));
+ out.append(ETAB.charAt(e2));
+ out.append(ETAB.charAt(e3));
+ }
+
+ return out.toString();
+ }
+}
Propchange: cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/Base64.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/Base64.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/Credentials.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/Credentials.java?rev=1067233&view=auto
==============================================================================
--- cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/Credentials.java (added)
+++ cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/Credentials.java Fri Feb 4 17:34:24 2011
@@ -0,0 +1,52 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.management.web.browser.client.service.settings;
+
+import javax.annotation.Nonnull;
+
+public class Credentials {
+ public static final Credentials EMPTY = new Credentials();
+
+ private final String username;
+ private final String password;
+
+ private Credentials() {
+ this.username = "";
+ this.password = "";
+ }
+
+ public Credentials(@Nonnull final String username, @Nonnull final String password) {
+ assert !"".equals(username);
+ assert !"".equals(password);
+
+ this.username = username;
+ this.password = password;
+ }
+
+ @Nonnull
+ public String getUsername() {
+ return username;
+ }
+
+ @Nonnull
+ public String getPassword() {
+ return password;
+ }
+}
Propchange: cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/Credentials.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/Credentials.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/IdentifierGenerator.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/IdentifierGenerator.java?rev=1067233&view=auto
==============================================================================
--- cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/IdentifierGenerator.java (added)
+++ cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/IdentifierGenerator.java Fri Feb 4 17:34:24 2011
@@ -0,0 +1,23 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.cxf.management.web.browser.client.service.settings;
+
+public interface IdentifierGenerator {
+ String generateUUID();
+}
Propchange: cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/IdentifierGenerator.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/IdentifierGenerator.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/IdentifierGeneratorImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/IdentifierGeneratorImpl.java?rev=1067233&view=auto
==============================================================================
--- cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/IdentifierGeneratorImpl.java (added)
+++ cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/IdentifierGeneratorImpl.java Fri Feb 4 17:34:24 2011
@@ -0,0 +1,26 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.cxf.management.web.browser.client.service.settings;
+
+public class IdentifierGeneratorImpl implements IdentifierGenerator {
+
+ public final native String generateUUID() /*-{
+ return $wnd.Math.uuid();
+ }-*/;
+}
Propchange: cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/IdentifierGeneratorImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/IdentifierGeneratorImpl.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/LocalStorage.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/LocalStorage.java?rev=1067233&view=auto
==============================================================================
--- cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/LocalStorage.java (added)
+++ cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/LocalStorage.java Fri Feb 4 17:34:24 2011
@@ -0,0 +1,31 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.management.web.browser.client.service.settings;
+
+public interface LocalStorage {
+
+ boolean isAvailable();
+
+ void saveSettings(Settings settings);
+
+ Settings retrieveSettings();
+
+ void clear();
+}
Propchange: cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/LocalStorage.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/LocalStorage.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/LocalStorageImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/LocalStorageImpl.java?rev=1067233&view=auto
==============================================================================
--- cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/LocalStorageImpl.java (added)
+++ cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/LocalStorageImpl.java Fri Feb 4 17:34:24 2011
@@ -0,0 +1,259 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.management.web.browser.client.service.settings;
+
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
+import com.google.gwt.core.client.JavaScriptObject;
+import com.google.gwt.core.client.JsArray;
+
+public class LocalStorageImpl implements LocalStorage {
+ private static final String SETTINGS_KEY = "logBrowser.settings";
+
+ private Boolean isAvailable;
+
+ public boolean isAvailable() {
+ if (isAvailable == null) {
+ this.isAvailable = checkIsAvailable();
+ }
+ return this.isAvailable;
+ }
+
+ private native boolean checkIsAvailable() /*-{
+ var key = "isLocalStorageAvailable";
+ $wnd.$.jStorage.set(key, true);
+ return !($wnd.$.jStorage.get(key) == null);
+ }-*/;
+
+ public void saveSettings(@Nonnull final Settings settings) {
+ if (isAvailable()) {
+ put(SETTINGS_KEY, Converter.convertToLocalSettings(settings));
+ }
+ }
+
+ @Nullable
+ public Settings retrieveSettings() {
+ if (isAvailable()) {
+ LocalSettings localSettings = (LocalSettings) get(SETTINGS_KEY);
+ if (localSettings != null) {
+ return Converter.convertToSettings(localSettings);
+ }
+ }
+ return null;
+ }
+
+ public void clear() {
+ if (isAvailable()) {
+ remove(SETTINGS_KEY);
+ }
+ }
+
+ private native void put(@Nonnull final String key, @Nonnull final JavaScriptObject obj) /*-{
+ $wnd.$.jStorage.set(key, obj);
+ }-*/;
+
+ @Nullable
+ private native JavaScriptObject get(@Nonnull final String key) /*-{
+ return $wnd.$.jStorage.get(key);
+ }-*/;
+
+ private native void remove(@Nonnull final String key) /*-{
+ $wnd.$.jStorage.deleteKey(key);
+ }-*/;
+
+ private static final class Converter {
+
+ private Converter() { }
+
+ @Nullable
+ public static Settings convertToSettings(@Nullable final LocalSettings src) {
+ if (src == null) {
+ return null;
+ }
+
+ Settings dst = new Settings();
+ dst.setCredentials(convertToCredentials(src.getCredentials()));
+ JsArray<LocalSubscription> subscriptions = src.getSubscriptions();
+ for (int i = 0; i < subscriptions.length(); i++) {
+ Subscription subscription = convertToSubscription(subscriptions.get(i));
+ if (subscription != null) {
+ dst.getSubscriptions().add(subscription);
+ }
+ }
+
+ return dst;
+ }
+
+ @Nullable
+ private static Credentials convertToCredentials(@Nullable final LocalCredentials src) {
+ if (src == null) {
+ return null;
+ }
+
+ return new Credentials(src.getUsername(), src.getPassword());
+ }
+
+ @Nullable
+ private static Subscription convertToSubscription(@Nullable final LocalSubscription src) {
+ if (src == null) {
+ return null;
+ }
+
+ return new Subscription(src.getId(), src.getName(), src.getURL());
+ }
+
+ @SuppressWarnings("unchecked") @Nullable
+ public static LocalSettings convertToLocalSettings(@Nullable final Settings src) {
+ if (src == null) {
+ return null;
+ }
+
+ LocalSettings dst = (LocalSettings) JavaScriptObject.createObject();
+
+ dst.setCredentials(convertToLocalCredentials(src.getCredentials()));
+
+ JsArray<LocalSubscription> dstSubscriptions =
+ (JsArray<LocalSubscription>) JavaScriptObject.createArray();
+
+ for (Subscription subscription : src.getSubscriptions()) {
+ dstSubscriptions.push(convertToLocalSubscription(subscription));
+ }
+
+ dst.setSubscriptions(dstSubscriptions);
+
+ return dst;
+
+ }
+
+ @Nullable
+ private static LocalCredentials convertToLocalCredentials(@Nullable final Credentials src) {
+ if (src == null) {
+ return null;
+ }
+
+ LocalCredentials dst = (LocalCredentials) JavaScriptObject.createObject();
+
+ dst.setUsername(src.getUsername());
+ dst.setPassword(src.getPassword());
+
+ return dst;
+ }
+
+ @Nullable
+ private static LocalSubscription convertToLocalSubscription(@Nullable final Subscription src) {
+ if (src == null) {
+ return null;
+ }
+
+ LocalSubscription dst = (LocalSubscription) JavaScriptObject.createObject();
+
+ dst.setId(src.getId());
+ dst.setName(src.getName());
+ dst.setURL(src.getUrl());
+
+ return dst;
+ }
+ }
+
+ public static class LocalSettings extends JavaScriptObject {
+
+ protected LocalSettings() { }
+
+ public final native void setCredentials(@Nullable final LocalCredentials credentials) /*-{
+ this.credentials = credentials;
+ }-*/;
+
+ @Nullable
+ public final native LocalCredentials getCredentials() /*-{
+ return this.credentials;
+ }-*/;
+
+ public final native void setSubscriptions(@Nullable JsArray<LocalSubscription> subscriptions) /*-{
+ this.subscriptions = subscriptions;
+ }-*/;
+
+ @Nonnull
+ public final native JsArray<LocalSubscription> getSubscriptions() /*-{
+ if (this.subscriptions != null) {
+ return this.subscriptions;
+ } else {
+ return [];
+ }
+ }-*/;
+ }
+ @SuppressWarnings("unused")
+ private static class LocalCredentials extends JavaScriptObject {
+
+ protected LocalCredentials() { }
+
+ public final native void setUsername(@Nullable final String username) /*-{
+ this.username = username;
+ }-*/;
+
+ @Nullable
+ public final native String getUsername() /*-{
+ return this.username;
+ }-*/;
+
+ public final native void setPassword(@Nullable final String password) /*-{
+ this.password = password;
+ }-*/;
+
+ @Nullable
+ public final native String getPassword() /*-{
+ return this.password;
+ }-*/;
+ }
+
+ @SuppressWarnings("unused")
+ private static class LocalSubscription extends JavaScriptObject {
+
+ protected LocalSubscription() { }
+
+ public final native void setId(@Nullable final String id) /*-{
+ this.id = id;
+ }-*/;
+
+ @Nullable
+ public final native String getId() /*-{
+ return this.id;
+ }-*/;
+
+ public final native void setName(@Nullable final String name) /*-{
+ this.name = name;
+ }-*/;
+
+ @Nullable
+ public final native String getName() /*-{
+ return this.name;
+ }-*/;
+
+ public final native void setURL(@Nullable final String url) /*-{
+ this.url = url;
+ }-*/;
+
+ @Nullable
+ public final native String getURL() /*-{
+ return this.url;
+ }-*/;
+ }
+
+}
Propchange: cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/LocalStorageImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/LocalStorageImpl.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/RemoteStorageProxy.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/RemoteStorageProxy.java?rev=1067233&view=auto
==============================================================================
--- cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/RemoteStorageProxy.java (added)
+++ cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/RemoteStorageProxy.java Fri Feb 4 17:34:24 2011
@@ -0,0 +1,29 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.management.web.browser.client.service.settings;
+
+import com.google.gwt.http.client.RequestCallback;
+
+public interface RemoteStorageProxy {
+
+ void saveSettings(Credentials credentials, RequestCallback callback);
+
+ void retrieveSettings(Credentials credentials, Settings settings, RequestCallback callback);
+}
Propchange: cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/RemoteStorageProxy.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/RemoteStorageProxy.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/RemoteStorageProxyImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/RemoteStorageProxyImpl.java?rev=1067233&view=auto
==============================================================================
--- cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/RemoteStorageProxyImpl.java (added)
+++ cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/RemoteStorageProxyImpl.java Fri Feb 4 17:34:24 2011
@@ -0,0 +1,282 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.management.web.browser.client.service.settings;
+
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.client.JavaScriptObject;
+import com.google.gwt.core.client.JsArray;
+import com.google.gwt.http.client.RequestBuilder;
+import com.google.gwt.http.client.RequestCallback;
+import com.google.gwt.http.client.RequestException;
+import com.google.gwt.http.client.Response;
+import com.google.gwt.http.client.URL;
+import com.google.gwt.json.client.JSONObject;
+import com.google.gwt.json.client.JSONValue;
+
+import org.apache.cxf.management.web.browser.client.service.AbstractCallback;
+
+public class RemoteStorageProxyImpl implements RemoteStorageProxy {
+ private static final String HOSTED_MODE_ENDPOINT_URL = "/log/browser/settings/";
+ private static final String RESOURCES_ENDPOINT_SUFFIX = "/resources/";
+ private static final String SETTINGS_ENDPOINT_SUFFIX = "/settings/";
+
+ private static final String AUTHORIZATION_HEADER = "Authorization";
+ private static final String CONTENT_TYPE_HEADER = "Content-Type";
+ private static final String ACCEPT_HEADER = "Accept";
+ private static final String JSON_TYPE = "application/json";
+
+ private static final String SETTINGS_KEY = "settings";
+
+ private String endpointURL;
+
+ public void saveSettings(@Nonnull final Credentials credentials,
+ @Nonnull final RequestCallback callback) {
+ RequestBuilder builder = buildRequest(RequestBuilder.GET, buildURL(credentials), credentials);
+ execute(null, builder, callback);
+ }
+
+ public void retrieveSettings(@Nonnull final Credentials credentials, @Nonnull final Settings settings,
+ @Nonnull final RequestCallback callback) {
+ RequestBuilder builder = buildRequest(RequestBuilder.PUT, buildURL(credentials), credentials);
+ execute(Converter.convertToRemoteSettings(settings), builder, callback);
+ }
+
+ @Nonnull
+ private String buildURL(@Nonnull final Credentials credentials) {
+ assert credentials.getUsername() != null && !"".equals(credentials.getUsername());
+
+ String url = URL.encode(buildEndpointURL() + credentials.getUsername());
+
+ assert !"".equals(url);
+ return url;
+ }
+
+ @Nonnull
+ private String buildEndpointURL() {
+ if (endpointURL == null) {
+ String baseURL = GWT.getHostPageBaseURL();
+ if (baseURL.endsWith(RESOURCES_ENDPOINT_SUFFIX)) {
+
+ // compute URL by replace "resources" suffix with "settings" suffix
+ endpointURL = cutResourcesSuffix(baseURL) + SETTINGS_ENDPOINT_SUFFIX;
+ } else {
+
+ // it ought to execute only in hosted mode, because there is diffrent base URL
+ endpointURL = HOSTED_MODE_ENDPOINT_URL;
+ }
+ }
+
+ return endpointURL;
+ }
+
+ @Nonnull
+ private String cutResourcesSuffix(@Nonnull final String url) {
+ return url.substring(0, url.lastIndexOf(RESOURCES_ENDPOINT_SUFFIX));
+ }
+
+ @Nonnull
+ private RequestBuilder buildRequest(@Nonnull final RequestBuilder.Method method,
+ @Nonnull final String url,
+ @Nonnull final Credentials credentials) {
+ assert !"".equals(url);
+
+ RequestBuilder builder = new RequestBuilder(method, url);
+ builder.setHeader(CONTENT_TYPE_HEADER, JSON_TYPE);
+ builder.setHeader(ACCEPT_HEADER, JSON_TYPE);
+
+ if (credentials != null) {
+ builder.setHeader(AUTHORIZATION_HEADER, getAuthorizationData(credentials));
+ }
+
+ return builder;
+ }
+
+ @Nonnull
+ private String getAuthorizationData(@Nonnull final Credentials credentials) {
+ return "Basic " + Base64.encode(credentials.getUsername() + ":" + credentials.getPassword());
+ }
+
+ private void execute(@Nullable final RemoteSettings remoteSettings, @Nonnull final RequestBuilder builder,
+ @Nonnull final RequestCallback callback) {
+ String json = null;
+ if (remoteSettings != null) {
+
+ // TODO add appropriate comment - wrap
+ JSONObject rootElement = new JSONObject();
+ rootElement.put(SETTINGS_KEY, new JSONObject(remoteSettings));
+ json = rootElement.toString();
+ }
+
+ try {
+ builder.sendRequest(json, callback);
+ } catch (RequestException ex) {
+
+ // TODO add custom exception
+ throw new RuntimeException(ex);
+ }
+ }
+
+ protected static class RemoteSettings extends JavaScriptObject {
+
+ protected RemoteSettings() {
+ }
+
+ public final native void setSubscriptions(@Nullable JsArray<RemoteSubscription> subscriptions) /*-{
+ this.subscriptions = subscriptions;
+ }-*/;
+
+ @Nonnull
+ public final native JsArray<RemoteSubscription> getSubscriptions() /*-{
+ if (this.subscriptions != null) {
+ return this.subscriptions;
+ } else {
+ return [];
+ }
+ }-*/;
+ }
+
+ protected static class RemoteSubscription extends JavaScriptObject {
+
+ protected RemoteSubscription() {
+ }
+
+ public final native void setId(@Nullable final String id) /*-{
+ this.id = id;
+ }-*/;
+
+ @Nullable
+ public final native String getId() /*-{
+ return this.id;
+ }-*/;
+
+ public final native void setUrl(@Nullable final String url) /*-{
+ this.url = url;
+ }-*/;
+
+ @Nullable
+ public final native String getUrl() /*-{
+ return this.url;
+ }-*/;
+
+ public final native void setName(@Nullable final String name) /*-{
+ this.name = name;
+ }-*/;
+
+ @Nullable
+ public final native String getName() /*-{
+ return this.name;
+ }-*/;
+ }
+
+ protected static final class Converter {
+
+ private Converter() {
+ }
+
+ @Nonnull
+ public static Settings convertToSettings(@Nonnull final RemoteSettings remoteSettings) {
+ Settings settings = new Settings();
+
+ JsArray<RemoteSubscription> remoteSubscriptions = remoteSettings.getSubscriptions();
+ for (int i = 0; i < remoteSubscriptions.length(); i++) {
+ settings.getSubscriptions().add(convertToSubscription(remoteSubscriptions.get(i)));
+ }
+
+ return settings;
+ }
+
+ @Nonnull
+ public static Subscription convertToSubscription(@Nonnull RemoteSubscription remoteSubscription) {
+ return new Subscription(remoteSubscription.getId(),
+ remoteSubscription.getName(), remoteSubscription.getUrl());
+ }
+
+ @SuppressWarnings("unchecked") @Nonnull
+ public static RemoteSettings convertToRemoteSettings(@Nonnull final Settings settings) {
+ RemoteSettings remoteSettings = (RemoteSettings) JavaScriptObject.createObject();
+
+ JsArray<RemoteSubscription> remoteSubscriptions =
+ (JsArray<RemoteSubscription>) JavaScriptObject.createArray();
+
+ for (Subscription subscription : settings.getSubscriptions()) {
+ remoteSubscriptions.push(convertToRemoteSubscription(subscription));
+ }
+
+ remoteSettings.setSubscriptions(remoteSubscriptions);
+
+ return remoteSettings;
+ }
+
+ @Nonnull
+ public static RemoteSubscription convertToRemoteSubscription(@Nonnull Subscription subscription) {
+ RemoteSubscription remoteSubscription = (RemoteSubscription) JavaScriptObject.createObject();
+
+ remoteSubscription.setId(subscription.getId());
+ remoteSubscription.setName(subscription.getName());
+ remoteSubscription.setUrl(subscription.getUrl());
+
+ return remoteSubscription;
+ }
+ }
+
+ public abstract static class Callback extends AbstractCallback<Settings> {
+
+ @Override @Nullable
+ protected Settings parse(@Nonnull final Response response) {
+ RemoteSettings result = null;
+
+ if (response.getText() != null && !"".equals(response.getText())) {
+
+ // TODO add appropriate comment - unwrap
+ JSONValue rootElement = new JSONObject(convertFromJSON(response.getText())).get(SETTINGS_KEY);
+ if (rootElement != null && rootElement.isObject() != null) {
+ result = (RemoteSettings) rootElement.isObject().getJavaScriptObject();
+ }
+ }
+
+ return result != null ? Converter.convertToSettings(result) : null;
+ }
+
+ // TODO check if this method must be final regardless to GWT's guidelines
+ // CHECKSTYLE:OFF
+ @Nonnull
+ private final native JavaScriptObject convertFromJSON(@Nonnull final String json) /*-{
+ return $wnd.JSON.parse(json);
+ }-*/;
+ // CHECKSTYLE:ON
+ }
+
+ public static class NoActionCallback extends AbstractCallback<Settings> {
+
+ @Override
+ public void onAccessDenied() { }
+
+ @Override
+ public void onSuccess(@Nullable final Settings obj) { }
+
+ @Override @Nullable
+ protected Settings parse(@Nonnull final Response response) {
+ return null;
+ }
+ }
+}
Propchange: cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/RemoteStorageProxyImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/RemoteStorageProxyImpl.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/Settings.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/Settings.java?rev=1067233&view=auto
==============================================================================
--- cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/Settings.java (added)
+++ cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/Settings.java Fri Feb 4 17:34:24 2011
@@ -0,0 +1,54 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.management.web.browser.client.service.settings;
+
+import java.util.LinkedHashSet;
+import java.util.Set;
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
+public class Settings {
+
+ @Nullable
+ private Credentials credentials;
+
+ @Nullable
+ private Set<Subscription> subscriptions;
+
+ @Nonnull
+ public Credentials getCredentials() {
+ if (credentials == null) {
+ credentials = Credentials.EMPTY;
+ }
+ return credentials;
+ }
+
+ public void setCredentials(@Nonnull final Credentials credentials) {
+ this.credentials = credentials;
+ }
+
+ @Nonnull
+ public Set<Subscription> getSubscriptions() {
+ if (subscriptions == null) {
+ subscriptions = new LinkedHashSet<Subscription>();
+ }
+ return subscriptions;
+ }
+}
Propchange: cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/Settings.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/Settings.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/SettingsFacade.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/SettingsFacade.java?rev=1067233&view=auto
==============================================================================
--- cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/SettingsFacade.java (added)
+++ cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/SettingsFacade.java Fri Feb 4 17:34:24 2011
@@ -0,0 +1,300 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.management.web.browser.client.service.settings;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+
+import org.apache.cxf.management.web.browser.client.EventBus;
+import org.apache.cxf.management.web.browser.client.event.GoToBrowserEvent;
+import org.apache.cxf.management.web.browser.client.event.RemoteStorageAccessDeniedEvent;
+
+@Singleton
+public class SettingsFacade {
+
+ @Nonnull
+ private final RemoteStorageProxy remoteStorage;
+
+ @Nonnull
+ private final LocalStorage localStorage;
+
+ @Nonnull
+ private final EventBus eventBus;
+
+ @Nullable
+ private StorageLayer storageLayer;
+
+ @Nonnull
+ private final IdentifierGenerator identifierGenerator;
+
+ private boolean initialized;
+
+ public enum StorageStrategy {
+ LOCAL_AND_REMOTE,
+ REMOTE
+ }
+
+ @Inject
+ public SettingsFacade(@Nonnull final RemoteStorageProxy remoteStorage,
+ @Nonnull final LocalStorage localStorage,
+ @Nonnull final EventBus eventBus,
+ @Nonnull final IdentifierGenerator identifierGenerator) {
+ this.remoteStorage = remoteStorage;
+ this.localStorage = localStorage;
+ this.eventBus = eventBus;
+ this.identifierGenerator = identifierGenerator;
+ }
+
+ public boolean isSettingsAlreadyInLocalStorage() {
+ return localStorage.isAvailable() && localStorage.retrieveSettings() != null;
+ }
+
+ public void initialize(@Nonnull final StorageStrategy strategy, @Nonnull final Credentials credentials) {
+ storageLayer = createStorageLayers(strategy);
+ storageLayer.initialize(credentials);
+ initialized = true;
+ }
+
+ public void clearMemoryAndLocalStorage() {
+ assert storageLayer != null;
+ storageLayer.clear();
+ initialized = false;
+ }
+
+ public void addSubscription(@Nonnull final String name, @Nonnull final String url) {
+ assert !"".equals(name);
+ assert !"".equals(url);
+ assert storageLayer != null;
+ isValid();
+
+ String id = identifierGenerator.generateUUID();
+ assert id != null && !"".equals(id);
+
+ storageLayer.getSettings().getSubscriptions().add(new Subscription(id, name, url));
+ storageLayer.update();
+ }
+
+ public void updateSubscription(@Nonnull final Subscription subscription) {
+ assert subscription.getUrl() != null && !"".equals(subscription.getUrl());
+ assert storageLayer != null;
+ isValid();
+
+ storageLayer.getSettings().getSubscriptions().remove(subscription);
+ storageLayer.getSettings().getSubscriptions().add(subscription);
+ storageLayer.update();
+ }
+
+ public void removeSubscription(@Nonnull final Subscription subscription) {
+ assert subscription.getUrl() != null && !"".equals(subscription.getUrl());
+ assert storageLayer != null;
+ isValid();
+
+ storageLayer.getSettings().getSubscriptions().remove(subscription);
+ storageLayer.update();
+ }
+
+ @Nonnull
+ public List<Subscription> getSubscriptions() {
+ assert storageLayer != null;
+ isValid();
+
+ return new ArrayList<Subscription>(storageLayer.getSettings().getSubscriptions());
+ }
+
+ private void isValid() {
+ if (!initialized) {
+ throw new IllegalStateException("Storage layers not initialized");
+ }
+ }
+
+ @Nonnull
+ private StorageLayer createStorageLayers(@Nonnull final StorageStrategy storageStrategy) {
+ switch(storageStrategy) {
+ case LOCAL_AND_REMOTE:
+ return new RemoteStorageLayer(remoteStorage,
+ new LocalStorageLayer(localStorage, new MemoryStorageLayer()));
+ case REMOTE:
+ return new RemoteStorageLayer(remoteStorage, new MemoryStorageLayer());
+ default:
+ throw new IllegalArgumentException("Unknown storage strategy type");
+ }
+ }
+
+ private interface StorageLayer {
+
+ boolean initialize(Credentials credentials);
+
+ Settings getSettings();
+
+ void update(Settings settings);
+
+ void update();
+
+ void clear();
+ }
+
+ private static class MemoryStorageLayer implements StorageLayer {
+
+ @Nonnull
+ private Settings settings;
+
+ public boolean initialize(@Nonnull final Credentials credentials) {
+ this.settings = new Settings();
+ this.settings.setCredentials(credentials);
+ return false;
+ }
+
+ @Nonnull
+ public Settings getSettings() {
+ return this.settings;
+ }
+
+ public void update(@Nonnull final Settings newSettings) {
+ this.settings = newSettings;
+ }
+
+ public void update() {
+ }
+
+ public void clear() {
+ this.settings = new Settings();
+ }
+ }
+
+ private static class LocalStorageLayer implements StorageLayer {
+
+ @Nonnull
+ private final MemoryStorageLayer parent; // TODO change to StorageLayer interface
+
+ @Nonnull
+ private final LocalStorage localStorage;
+
+ public LocalStorageLayer(@Nonnull final LocalStorage localStorage,
+ @Nonnull final MemoryStorageLayer parent) {
+ this.parent = parent;
+ this.localStorage = localStorage;
+ }
+
+ public boolean initialize(@Nonnull final Credentials credentials) {
+ boolean isSuccess = parent.initialize(credentials);
+
+ assert !isSuccess;
+
+ Settings settings = localStorage.retrieveSettings();
+ if (settings != null) {
+ parent.update(settings);
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ @Nonnull
+ public Settings getSettings() {
+ return parent.getSettings();
+ }
+
+ public void update(@Nonnull final Settings settings) {
+ parent.update(settings);
+ localStorage.saveSettings(settings);
+ }
+
+ public void update() {
+ update(parent.getSettings());
+ }
+
+ public void clear() {
+ parent.clear();
+ localStorage.clear();
+ }
+ }
+
+ private class RemoteStorageLayer implements StorageLayer {
+
+ @Nonnull
+ private final StorageLayer parent;
+
+ @Nonnull
+ private final RemoteStorageProxy remoteStorage;
+
+ public RemoteStorageLayer(@Nonnull final RemoteStorageProxy remoteStorage,
+ @Nonnull final StorageLayer parent) {
+ this.parent = parent;
+ this.remoteStorage = remoteStorage;
+ }
+
+ public boolean initialize(@Nonnull final Credentials credentials) {
+ assert credentials != null;
+
+ boolean isSuccess = parent.initialize(credentials);
+
+ if (!isSuccess) {
+ remoteStorage.saveSettings(credentials, new RemoteStorageProxyImpl.Callback() {
+
+ @Override
+ public void onAccessDenied() {
+ eventBus.fireEvent(new RemoteStorageAccessDeniedEvent());
+ }
+
+ @Override
+ public void onSuccess(@Nullable final Settings retrievedSettings) {
+ Settings settings = retrievedSettings != null ? retrievedSettings : new Settings();
+ settings.setCredentials(credentials);
+
+ parent.update(settings);
+
+ eventBus.fireEvent(new GoToBrowserEvent());
+ }
+ });
+ }
+
+ return true;
+ }
+
+ @Nonnull
+ public Settings getSettings() {
+ return parent.getSettings();
+ }
+
+ public void update(@Nonnull final Settings settings) {
+ assert settings != null;
+
+ parent.update(settings);
+
+ remoteStorage.retrieveSettings(settings.getCredentials(), settings,
+ new RemoteStorageProxyImpl.NoActionCallback());
+ }
+
+ public void update() {
+ update(parent.getSettings());
+ }
+
+ public void clear() {
+ parent.clear();
+ }
+ }
+}
+
Propchange: cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/SettingsFacade.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/SettingsFacade.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/Subscription.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/Subscription.java?rev=1067233&view=auto
==============================================================================
--- cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/Subscription.java (added)
+++ cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/Subscription.java Fri Feb 4 17:34:24 2011
@@ -0,0 +1,76 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.management.web.browser.client.service.settings;
+
+import javax.annotation.Nonnull;
+
+public class Subscription {
+ private String id;
+ private String name;
+ private String url;
+
+ public Subscription(@Nonnull final String id, @Nonnull final String name, @Nonnull final String url) {
+ assert !"".equals(id);
+ assert !"".equals(name);
+ assert !"".equals(url);
+
+ this.id = id;
+ this.name = name;
+ this.url = url;
+ }
+
+ @Nonnull
+ public String getId() {
+ return id;
+ }
+
+ @Nonnull
+ public String getName() {
+ return name;
+ }
+
+ @Nonnull
+ public String getUrl() {
+ return url;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+
+ Subscription that = (Subscription)o;
+
+ if (id != null ? !id.equals(that.id) : that.id != null) {
+ return false;
+ }
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ return id != null ? id.hashCode() : 0;
+ }
+}
Propchange: cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/Subscription.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/service/settings/Subscription.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/ui/AbstractDialog.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/ui/AbstractDialog.java?rev=1067233&view=auto
==============================================================================
--- cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/ui/AbstractDialog.java (added)
+++ cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/ui/AbstractDialog.java Fri Feb 4 17:34:24 2011
@@ -0,0 +1,37 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.management.web.browser.client.ui;
+
+import javax.annotation.Nonnull;
+
+import com.google.gwt.user.client.ui.DialogBox;
+import com.google.gwt.user.client.ui.Widget;
+
+public abstract class AbstractDialog extends DialogBox {
+
+ protected void init(@Nonnull final String title, @Nonnull final Widget widget) {
+ setGlassEnabled(true);
+ setAnimationEnabled(false);
+ setAutoHideEnabled(true);
+
+ setText(title);
+ setWidget(widget);
+ }
+}
Propchange: cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/ui/AbstractDialog.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/ui/AbstractDialog.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/ui/BasePresenter.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/ui/BasePresenter.java?rev=1067233&view=auto
==============================================================================
--- cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/ui/BasePresenter.java (added)
+++ cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/ui/BasePresenter.java Fri Feb 4 17:34:24 2011
@@ -0,0 +1,69 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.management.web.browser.client.ui;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.annotation.Nonnull;
+
+import com.google.gwt.event.shared.HandlerRegistration;
+import com.google.gwt.user.client.ui.HasWidgets;
+
+import org.apache.cxf.management.web.browser.client.EventBus;
+
+public abstract class BasePresenter implements Presenter {
+
+ @Nonnull
+ protected final EventBus eventBus;
+
+ @Nonnull
+ private final View view;
+
+ @Nonnull
+ private final BindStrategy bindStrategy;
+
+ @Nonnull
+ private final List<HandlerRegistration> handlerRegistrations;
+
+ public BasePresenter(@Nonnull final EventBus eventBus, @Nonnull final View view,
+ @Nonnull final BindStrategy bindStrategy) {
+ this.eventBus = eventBus;
+ this.view = view;
+ this.bindStrategy = bindStrategy;
+ this.handlerRegistrations = new ArrayList<HandlerRegistration>();
+ }
+
+ public void go(HasWidgets container) {
+ bindStrategy.bind(container, view);
+ }
+
+ public void unbind() {
+ bindStrategy.unbind(view);
+
+ for (HandlerRegistration handlerRegistration : handlerRegistrations) {
+ handlerRegistration.removeHandler();
+ }
+ handlerRegistrations.clear();
+ }
+
+ protected void registerHandler(@Nonnull final HandlerRegistration handlerRegistration) {
+ handlerRegistrations.add(handlerRegistration);
+ }
+}
Propchange: cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/ui/BasePresenter.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/ui/BasePresenter.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/ui/BindStrategy.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/ui/BindStrategy.java?rev=1067233&view=auto
==============================================================================
--- cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/ui/BindStrategy.java (added)
+++ cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/client/ui/BindStrategy.java Fri Feb 4 17:34:24 2011
@@ -0,0 +1,30 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.management.web.browser.client.ui;
+
+import javax.annotation.Nonnull;
+
+import com.google.gwt.user.client.ui.HasWidgets;
+
+//TODO view should decide how to present it - bindstrategy should be receive by View not inject to presenter
+public interface BindStrategy {
+ void bind(@Nonnull HasWidgets container, @Nonnull View view);
+ void unbind(@Nonnull View view);
+}