You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@labs.apache.org by no...@apache.org on 2009/06/26 22:43:14 UTC

svn commit: r788864 [2/3] - in /labs/hupa: ./ .settings/ src/ src/main/ src/main/java/ src/main/java/org/ src/main/java/org/apache/ src/main/java/org/apache/hupa/ src/main/java/org/apache/hupa/client/ src/main/java/org/apache/hupa/client/bundles/ src/m...

Added: labs/hupa/src/main/java/org/apache/hupa/common/data/IMAPHeader.java
URL: http://svn.apache.org/viewvc/labs/hupa/src/main/java/org/apache/hupa/common/data/IMAPHeader.java?rev=788864&view=auto
==============================================================================
--- labs/hupa/src/main/java/org/apache/hupa/common/data/IMAPHeader.java (added)
+++ labs/hupa/src/main/java/org/apache/hupa/common/data/IMAPHeader.java Fri Jun 26 20:43:11 2009
@@ -0,0 +1,93 @@
+/****************************************************************
+ * 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.hupa.common.data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+public class IMAPHeader implements Serializable {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -5929451689355452678L;
+	private String raw;
+	private String from;
+	private String subject;
+	private String to;
+	private String cc;
+	private Date rDate;
+
+	public void setRawHeader(String raw) {
+		this.raw = raw;
+	}
+
+	public String getRawHeader() {
+		return raw;
+	}
+
+	public void setFrom(String from) {
+		this.from = from;
+	}
+
+	public String getFrom() {
+		return convertNull(from);
+	}
+
+	public void setCc(String cc) {
+		this.cc = cc;
+	}
+
+	public String getCc() {
+		return convertNull(cc);
+	}
+
+	public void setSubject(String subject) {
+		this.subject = subject;
+	}
+
+	public String getSubject() {
+		return convertNull(subject);
+	}
+
+	public String getTo() {
+		return convertNull(to);
+	}
+
+	public void setTo(String to) {
+		this.to = to;
+	}
+
+	private String convertNull(String raw) {
+		if (raw == null) {
+			return "";
+		}
+		return raw;
+	}
+
+	public void setReceivedDate(Date rDate) {
+		this.rDate = rDate;
+	}
+
+	public Date getReceivedDate() {
+		return rDate;
+	}
+
+}

Added: labs/hupa/src/main/java/org/apache/hupa/common/data/IMAPMessage.java
URL: http://svn.apache.org/viewvc/labs/hupa/src/main/java/org/apache/hupa/common/data/IMAPMessage.java?rev=788864&view=auto
==============================================================================
--- labs/hupa/src/main/java/org/apache/hupa/common/data/IMAPMessage.java (added)
+++ labs/hupa/src/main/java/org/apache/hupa/common/data/IMAPMessage.java Fri Jun 26 20:43:11 2009
@@ -0,0 +1,82 @@
+/****************************************************************
+ * 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.hupa.common.data;
+
+import java.io.Serializable;
+import java.util.List;
+
+public class IMAPMessage implements Serializable {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 7331361994526216161L;
+	private IMAPHeader header;
+	private int uid;
+	private IMAPMessageContent content;
+	private List<IMAPFlag> flags;
+
+	public enum IMAPFlag {
+		SEEN, DELETED, RECENT
+	}
+
+	public void setIMAPFlags(List<IMAPFlag> flags) {
+		this.flags = flags;
+	}
+
+	public List<IMAPFlag> getIMAPFlags() {
+		return flags;
+	}
+
+	public void setIMAPHeader(IMAPHeader header) {
+		this.header = header;
+	}
+
+	public IMAPHeader getIMAPHeader() {
+		return header;
+	}
+
+	public int getUid() {
+		return uid;
+	}
+
+	public void setUid(int uid) {
+		this.uid = uid;
+	}
+
+	public void setIMAPMessageContent(IMAPMessageContent content) {
+		this.content = content;
+	}
+
+	public IMAPMessageContent getIMAPMessageContent() {
+		return content;
+	}
+
+	public boolean isExposed() {
+		if (getIMAPHeader() != null && getIMAPMessageContent() != null) {
+			return true;
+		} else {
+			return false;
+		}
+	}
+
+	public String toString() {
+		return String.valueOf(getUid());
+	}
+}

Added: labs/hupa/src/main/java/org/apache/hupa/common/data/IMAPMessageAttachment.java
URL: http://svn.apache.org/viewvc/labs/hupa/src/main/java/org/apache/hupa/common/data/IMAPMessageAttachment.java?rev=788864&view=auto
==============================================================================
--- labs/hupa/src/main/java/org/apache/hupa/common/data/IMAPMessageAttachment.java (added)
+++ labs/hupa/src/main/java/org/apache/hupa/common/data/IMAPMessageAttachment.java Fri Jun 26 20:43:11 2009
@@ -0,0 +1,41 @@
+/****************************************************************
+ * 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.hupa.common.data;
+
+import java.io.Serializable;
+
+public class IMAPMessageAttachment implements Serializable {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -6896197131104882424L;
+	private String name;
+
+	public void setName(String name) {
+		this.name = name;
+		;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+}

Added: labs/hupa/src/main/java/org/apache/hupa/common/data/IMAPMessageContent.java
URL: http://svn.apache.org/viewvc/labs/hupa/src/main/java/org/apache/hupa/common/data/IMAPMessageContent.java?rev=788864&view=auto
==============================================================================
--- labs/hupa/src/main/java/org/apache/hupa/common/data/IMAPMessageContent.java (added)
+++ labs/hupa/src/main/java/org/apache/hupa/common/data/IMAPMessageContent.java Fri Jun 26 20:43:11 2009
@@ -0,0 +1,58 @@
+/****************************************************************
+ * 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.hupa.common.data;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+public class IMAPMessageContent implements Serializable {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 7611536915564919521L;
+	private boolean isHTML;
+	private String text;
+	private List<IMAPMessageAttachment> aList = new ArrayList<IMAPMessageAttachment>();
+
+	public void setIsHTML(boolean isHTML) {
+		this.isHTML = isHTML;
+	}
+
+	public boolean isHTML() {
+		return isHTML;
+	}
+
+	public void setText(String text) {
+		this.text = text;
+	}
+
+	public String getText() {
+		return text;
+	}
+
+	public void setIMAPMessageAttachments(List<IMAPMessageAttachment> aList) {
+		this.aList = aList;
+	}
+
+	public List<IMAPMessageAttachment> getIMAPMessageAttachments() {
+		return aList;
+	}
+}

Added: labs/hupa/src/main/java/org/apache/hupa/common/data/IMAPUser.java
URL: http://svn.apache.org/viewvc/labs/hupa/src/main/java/org/apache/hupa/common/data/IMAPUser.java?rev=788864&view=auto
==============================================================================
--- labs/hupa/src/main/java/org/apache/hupa/common/data/IMAPUser.java (added)
+++ labs/hupa/src/main/java/org/apache/hupa/common/data/IMAPUser.java Fri Jun 26 20:43:11 2009
@@ -0,0 +1,71 @@
+/****************************************************************
+ * 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.hupa.common.data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+public class IMAPUser implements Serializable {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -1650646176887124796L;
+	private String name;
+	private String password;
+	private Date loginDate;
+	private boolean auth;
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setPassword(String password) {
+		this.password = password;
+	}
+
+	public String getPassword() {
+		return password;
+	}
+
+	public Date getLoginDate() {
+		return loginDate;
+	}
+
+	public void setLoginDate(Date loginDate) {
+		this.loginDate = loginDate;
+	}
+
+	public void setAuthenticated(boolean auth) {
+		this.auth = auth;
+	}
+
+	public boolean getAuthenticated() {
+		return auth;
+	}
+
+	public String toString() {
+		return getName();
+	}
+}

Added: labs/hupa/src/main/java/org/apache/hupa/common/data/ResultList.java
URL: http://svn.apache.org/viewvc/labs/hupa/src/main/java/org/apache/hupa/common/data/ResultList.java?rev=788864&view=auto
==============================================================================
--- labs/hupa/src/main/java/org/apache/hupa/common/data/ResultList.java (added)
+++ labs/hupa/src/main/java/org/apache/hupa/common/data/ResultList.java Fri Jun 26 20:43:11 2009
@@ -0,0 +1,40 @@
+/****************************************************************
+ * 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.hupa.common.data;
+
+import java.util.ArrayList;
+
+public class ResultList<E> extends ArrayList<E> {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 7698490725218285776L;
+	private int realSize;
+
+	public void setRealSize(int realSize) {
+		this.realSize = realSize;
+	}
+
+	public int getRealSize() {
+		return realSize;
+	}
+
+}

Added: labs/hupa/src/main/java/org/apache/hupa/common/data/Session.java
URL: http://svn.apache.org/viewvc/labs/hupa/src/main/java/org/apache/hupa/common/data/Session.java?rev=788864&view=auto
==============================================================================
--- labs/hupa/src/main/java/org/apache/hupa/common/data/Session.java (added)
+++ labs/hupa/src/main/java/org/apache/hupa/common/data/Session.java Fri Jun 26 20:43:11 2009
@@ -0,0 +1,56 @@
+/****************************************************************
+ * 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.hupa.common.data;
+
+import java.io.Serializable;
+
+public class Session implements Serializable{
+	
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -6517729329379946512L;
+	private IMAPUser user;
+	private IMAPFolder folder;
+	private IMAPMessage message;
+
+	public void setIMAPUser(IMAPUser user) {
+		this.user = user;
+	}
+	
+	public IMAPUser getIMAPUser() {
+		return user;
+	}
+	
+	public void setSelectedIMAPFolder(IMAPFolder folder) {
+		this.folder = folder;
+	}
+
+	public IMAPFolder getSelectedIMAPFolder() {
+		return folder;
+	}
+	
+	public IMAPMessage getSelectedIMAPMessage() {
+		return message;
+	}
+	
+	public void setSelectedIMAPMessage(IMAPMessage message) {
+		this.message = message;
+	}
+}

Added: labs/hupa/src/main/java/org/apache/hupa/server/IMAPServiceImpl.java
URL: http://svn.apache.org/viewvc/labs/hupa/src/main/java/org/apache/hupa/server/IMAPServiceImpl.java?rev=788864&view=auto
==============================================================================
--- labs/hupa/src/main/java/org/apache/hupa/server/IMAPServiceImpl.java (added)
+++ labs/hupa/src/main/java/org/apache/hupa/server/IMAPServiceImpl.java Fri Jun 26 20:43:11 2009
@@ -0,0 +1,358 @@
+/****************************************************************
+ * 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.hupa.server;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.charset.Charset;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import org.columba.ristretto.coder.Base64DecoderInputStream;
+import org.columba.ristretto.coder.QuotedPrintableDecoderInputStream;
+import org.columba.ristretto.coder.CharsetDecoderInputStream;
+import org.columba.ristretto.imap.IMAPException;
+import org.columba.ristretto.imap.IMAPFlags;
+import org.columba.ristretto.imap.IMAPProtocol;
+import org.columba.ristretto.imap.ListInfo;
+import org.columba.ristretto.imap.SequenceSet;
+import org.columba.ristretto.io.StreamUtils;
+import org.columba.ristretto.message.Header;
+import org.columba.ristretto.message.MailboxInfo;
+import org.columba.ristretto.message.MimeHeader;
+import org.columba.ristretto.message.MimePart;
+import org.columba.ristretto.message.MimeTree;
+import org.columba.ristretto.parser.DateParser;
+import org.columba.ristretto.parser.ParserException;
+
+import org.apache.hupa.client.services.IMAPService;
+import org.apache.hupa.client.services.IMAPServiceException;
+import org.apache.hupa.common.data.IMAPFolder;
+import org.apache.hupa.common.data.IMAPHeader;
+import org.apache.hupa.common.data.IMAPMessage;
+import org.apache.hupa.common.data.IMAPMessageContent;
+import org.apache.hupa.common.data.IMAPUser;
+import org.apache.hupa.common.data.ResultList;
+import org.apache.hupa.common.data.Session;
+import org.apache.hupa.common.data.IMAPMessage.IMAPFlag;
+import com.google.gwt.user.server.rpc.RemoteServiceServlet;
+
+import org.apache.commons.lang.StringEscapeUtils;
+
+public class IMAPServiceImpl extends RemoteServiceServlet implements
+		IMAPService {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -1853475303345399549L;
+
+	public Session login(String username, String password)
+			throws IMAPServiceException {
+
+		try {
+			IMAPUser user = new IMAPUser();
+			user.setName(username);
+			user.setPassword(password);
+			IMAPProtocol protocol = getProtocol(user);
+			protocol.openPort();
+			protocol.login(username, password.toCharArray());
+
+			if (protocol.getState() == IMAPProtocol.AUTHENTICATED) {
+				user.setLoginDate(new Date());
+				user.setAuthenticated(true);
+				Session session = new Session();
+				session.setIMAPUser(user);
+				return session;
+			}
+		} catch (IOException e) {
+			throw new IMAPServiceException(e.getMessage());
+		} catch (IMAPException e) {
+			throw new IMAPServiceException(e.getMessage());
+		}
+
+		return null;
+
+	}
+
+	private IMAPProtocol getProtocol(IMAPUser user) throws IOException,
+			IMAPException {
+		IMAPProtocol protocol = new IMAPProtocol("myblog.kicks-ass.org",
+				IMAPProtocol.DEFAULT_PORT);
+		protocol.openPort();
+		protocol.login(user.getName(), user.getPassword().toCharArray());
+
+		return protocol;
+
+	}
+
+	public ResultList<IMAPMessage> getMessages(Session session, int start, int end) throws IMAPServiceException {
+		ResultList<IMAPMessage> mList = new ResultList<IMAPMessage>();
+
+		IMAPProtocol proto = null;
+		try {
+			proto = getProtocol(session.getIMAPUser());
+			MailboxInfo mInfo = proto.select(session.getSelectedIMAPFolder().getFullName());
+
+			int exists = mInfo.getExists();
+			mList.setRealSize(exists);
+
+			if (exists == 0) {
+				return mList;
+			}
+
+			if (end > exists) {
+				end = 0;
+			}
+
+			SequenceSet sSet = new SequenceSet(exists - end, exists - start);
+			org.columba.ristretto.imap.IMAPHeader[] headers = proto
+					.fetchHeader(sSet);
+			IMAPFlags[] flags = proto.fetchFlags(sSet);
+			Integer[] uids = proto.fetchUid(sSet);
+			for (int i = 0; i < headers.length; i++) {
+				Header header = headers[i].getHeader();
+
+				IMAPHeader newHeader = new IMAPHeader();
+				newHeader.setRawHeader(header.toString());
+				newHeader.setFrom(header.get("From"));
+				newHeader.setTo(header.get("To"));
+				newHeader.setSubject(header.get("Subject"));
+				newHeader.setCc(header.get("CC"));
+				try {
+					newHeader.setReceivedDate(DateParser.parse(header
+							.get("Date")));
+				} catch (ParserException e) {
+					newHeader.setReceivedDate(new Date());
+				}
+
+				List<IMAPFlag> iFlags = new ArrayList<IMAPFlag>();
+				IMAPFlags imapFlags = flags[i];
+				if (imapFlags.getDeleted()) {
+					iFlags.add(IMAPMessage.IMAPFlag.DELETED);
+				}
+				if (imapFlags.getSeen()) {
+					iFlags.add(IMAPFlag.SEEN);
+				}
+				if (imapFlags.getRecent()) {
+					iFlags.add(IMAPFlag.RECENT);
+				}
+				IMAPMessage msg = new IMAPMessage();
+				msg.setIMAPHeader(newHeader);
+				msg.setUid(uids[i]);
+				msg.setIMAPFlags(iFlags);
+				mList.add(0, msg);
+			}
+			return mList;
+		} catch (IOException e) {
+			throw new IMAPServiceException(
+					"Error while fetching headers for user " + session.getIMAPUser().getName()
+							+ ": " + e.getMessage());
+		} catch (IMAPException e) {
+			throw new IMAPServiceException(
+					"Error while fetching headers for user " + session.getIMAPUser().getName()
+							+ ": " + e.getMessage());
+		} finally {
+			if (proto != null) {
+				try {
+					proto.close();
+				} catch (Exception e) {
+					// Ignore on close
+				}
+			}
+		}
+	}
+
+
+	public IMAPMessage exposeMessage(Session session) throws IMAPServiceException {
+		IMAPMessage msg = session.getSelectedIMAPMessage();
+		if (msg.isExposed()) {
+			return msg;
+		}
+		IMAPProtocol proto = null;
+		try {
+			proto = getProtocol(session.getIMAPUser());
+			proto.select(session.getSelectedIMAPFolder().getName());
+
+			IMAPMessageContent content = new IMAPMessageContent();
+
+			MimeTree mTree = proto.uidFetchBodystructure(msg.getUid());
+
+			MimePart textPart = mTree.getFirstTextPart("plain");
+
+			if (textPart != null) {
+				InputStream body = proto.uidFetchBody(msg.getUid(), textPart
+						.getAddress());
+				MimeHeader textHeader = textPart.getHeader();
+
+				if (textHeader.getContentTransferEncoding() == MimeHeader.QUOTED_PRINTABLE) {
+					body = new QuotedPrintableDecoderInputStream(body);
+				} else if (textHeader.getContentTransferEncoding() == MimeHeader.BASE64) {
+					body = new Base64DecoderInputStream(body);
+				}
+
+				String charsetName = textHeader.getContentParameter("charset");
+				if (charsetName == null) {
+					charsetName = System.getProperty("file.encoding");
+				}
+
+				body = new CharsetDecoderInputStream(body, Charset
+						.forName(charsetName));
+
+				if (textHeader.getContentType().equalsIgnoreCase("plain/text")) {
+					String plainContent = StreamUtils.readInString(body)
+							.toString();
+					content.setText(StringEscapeUtils.escapeHtml(plainContent)
+							.replaceAll("\n", "<br>"));
+				} else {
+					String plainContent = StreamUtils.readInString(body)
+							.toString();
+					content.setText(StringEscapeUtils.escapeHtml(plainContent)
+							.replaceAll("\n", "<br>"));
+				}
+			}
+
+			if (mTree.count() > 1 || textPart == null) {
+				System.out.println("message has attachments");
+				System.out.println("---");
+			}
+
+			msg.setIMAPMessageContent(content);
+
+			return msg;
+		} catch (IOException e) {
+			e.printStackTrace();
+			throw new IMAPServiceException("Unable to expose msg for uid "
+					+ msg.getUid());
+		} catch (IMAPException e) {
+			e.printStackTrace();
+			throw new IMAPServiceException("Unable to expose msg for uid "
+					+ msg.getUid());
+
+		} finally {
+			if (proto != null) {
+				try {
+					proto.close();
+				} catch (Exception e) {
+					// Ignore on close
+				}
+			}
+		}
+	}
+
+
+	public List<IMAPFolder> getFolders(Session session)
+			throws IMAPServiceException {
+		List<IMAPFolder> fList = new ArrayList<IMAPFolder>();
+		IMAPProtocol protocol = null;
+		try {
+			protocol = getProtocol(session.getIMAPUser());
+			ListInfo[] infos = protocol.list("", "*");
+			for (int i = 0; i < infos.length; i++) {
+				ListInfo info = infos[i];
+				String fullName = info.getName();
+				String delimiter = info.getDelimiter();
+				// MailboxInfo mInfo= protocol.select(info.getName());
+
+				IMAPFolder iFolder = new IMAPFolder(info.getName());
+				iFolder.setDelimiter(delimiter);
+				// iFolder.setMessageCount(mInfo.getExists());
+				// iFolder.setUnseenMessageCount(mInfo.);
+
+				int index = fullName.lastIndexOf(delimiter);
+				if (index > -1) {
+					String parentFullName = fullName.substring(0, index);
+					handleIMAPFolderTree(fList, iFolder, parentFullName);
+				} else {
+					fList.add(iFolder);
+				}
+			}
+			return fList;
+		} catch (IOException e) {
+			e.printStackTrace();
+			throw new IMAPServiceException("Unable to get folders for User "
+					+ session.getIMAPUser());
+		} catch (IMAPException e) {
+			e.printStackTrace();
+			throw new IMAPServiceException("Unable to get folders for User "
+					+ session.getIMAPUser());
+		} finally {
+			if (protocol != null) {
+				try {
+					protocol.close();
+				} catch (Exception e) {
+					// Ignore on close
+				}
+			}
+		}
+	}
+
+	private void handleIMAPFolderTree(List<IMAPFolder> fList,
+			IMAPFolder iFolder, String parentFullName) {
+		for (int a = 0; a < fList.size(); a++) {
+			IMAPFolder tmpFolder = fList.get(a);
+			if (tmpFolder.getFullName().equals(parentFullName)) {
+				tmpFolder.getChildIMAPFolders().add(iFolder);
+			} else {
+				List<IMAPFolder> childFolders = tmpFolder.getChildIMAPFolders();
+				if (childFolders != null && childFolders.isEmpty() == false) {
+					handleIMAPFolderTree(childFolders, iFolder, parentFullName);
+				}
+			}
+		}
+	}
+
+	public void addFolder(Session session, IMAPFolder folder)
+			throws IMAPServiceException {
+		try {
+			IMAPProtocol protocol = getProtocol(session.getIMAPUser());
+			protocol.create(folder.getFullName());
+			protocol.subscribe(folder.getFullName());
+		} catch (IOException e) {
+			e.printStackTrace();
+			throw new IMAPServiceException("Error while removing folder "
+					+ folder + " for user " + session.getIMAPUser() + ": " + e.toString());
+		} catch (IMAPException e) {
+			e.printStackTrace();
+			throw new IMAPServiceException("Error while removing folder "
+					+ folder + " for user " + session.getIMAPUser() + ": " + e.toString());
+
+		}
+	}
+
+	public void removeFolder(Session session, IMAPFolder folder)
+			throws IMAPServiceException {
+		try {
+			IMAPProtocol protocol = getProtocol(session.getIMAPUser());
+			protocol.unsubscribe(folder.getFullName());
+			protocol.delete(folder.getFullName());
+		} catch (IOException e) {
+			e.printStackTrace();
+			throw new IMAPServiceException("Error while removing folder "
+					+ folder + " for user " + session.getIMAPUser() + ": " + e.toString());
+		} catch (IMAPException e) {
+			e.printStackTrace();
+			throw new IMAPServiceException("Error while removing folder "
+					+ folder + " for user " + session.getIMAPUser() + ": " + e.toString());
+
+		}
+	}
+
+}

Added: labs/hupa/war/Hupa.css
URL: http://svn.apache.org/viewvc/labs/hupa/war/Hupa.css?rev=788864&view=auto
==============================================================================
--- labs/hupa/war/Hupa.css (added)
+++ labs/hupa/war/Hupa.css Fri Jun 26 20:43:11 2009
@@ -0,0 +1,77 @@
+/** Add css rules here for your application. */
+
+
+/** Example rules used by the template application (remove for your app) */
+
+h1 {
+  font-size: 2em;
+  font-weight: bold;
+  color: #777777;
+  margin: 40px 0px 70px;
+  text-align: center;
+}
+
+
+.cbg-RP { 
+	background-color:	#E6E6FA; 
+}
+
+.hupa-LoginWidgetHeader {
+	border-top:			1pt solid grey;
+	border-bottom:		1pt solid grey;
+	text-align:			left;
+	padding-left:		5px;
+	background-color:	#E6E6FA;
+}
+
+.hupa-IMAPMessageWidget-Header {
+	border:				1pt solid grey;
+	text-align:			left;
+	background-color:	#E6E6FA;
+}
+
+.hupa-IMAPMessageWidget-ButtonBar {
+	border-bottom:		1pt solid grey;
+	padding-left:		5px;
+	padding-bottom:		5px;
+}
+
+.hupa-Northpanel {
+	border-top:			1pt solid grey;
+	border-bottom:		1pt solid grey;
+	
+	background-color:	#E6E6FA;
+}
+
+.hupa-Mailtable-Header {
+	background-color:	#E6E6FA;
+	text-align: 		center;
+}
+
+.hupa-Mailtable-row-notseen {
+	  font-weight: 		bold;
+}
+
+.hupa-Mailtable-row-selected {
+	background-color:	#F0E68C;
+	text-align: 		left;
+	vertical-align: 	top;
+	margin: 			0px 5px 0px 5px;
+	font-size: 			80%;
+}
+.hupa-Mailtable-row1 {
+	background-color:	#FFFFFF;
+	text-align: 		left;
+	vertical-align: 	top;
+	margin: 			0px 5px 0px 5px;
+	font-size: 			80%;
+	
+}
+
+.hupa-Mailtable-row2 {
+	background-color:	#F5F5F5;
+	text-align: 		left;
+	vertical-align:		top;
+	margin: 			0px 5px 0px 5px;
+	font-size: 			80%;
+}

Added: labs/hupa/war/Hupa.html
URL: http://svn.apache.org/viewvc/labs/hupa/war/Hupa.html?rev=788864&view=auto
==============================================================================
--- labs/hupa/war/Hupa.html (added)
+++ labs/hupa/war/Hupa.html Fri Jun 26 20:43:11 2009
@@ -0,0 +1,41 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<!-- The HTML 4.01 Transitional DOCTYPE declaration-->
+<!-- above set at the top of the file will set     -->
+<!-- the browser's rendering engine into           -->
+<!-- "Quirks Mode". Replacing this declaration     -->
+<!-- with a "Standards Mode" doctype is supported, -->
+<!-- but may lead to some differences in layout.   -->
+
+<html>
+  <head>
+    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
+
+    <!--                                                               -->
+    <!-- Consider inlining CSS to reduce the number of requested files -->
+    <!--                                                               -->
+    <link type="text/css" rel="stylesheet" href="Hupa.css">
+
+    <!--                                           -->
+    <!-- Any title is fine                         -->
+    <!--                                           -->
+    <title>GWTMail</title>
+    
+    <!--                                           -->
+    <!-- This script loads your compiled module.   -->
+    <!-- If you add any GWT meta tags, they must   -->
+    <!-- be added before this line.                -->
+    <!--                                           -->
+    <script type="text/javascript" language="javascript" src="hupa/hupa.nocache.js"></script>
+  </head>
+
+  <!--                                           -->
+  <!-- The body can have arbitrary html, or      -->
+  <!-- you can leave the body empty if you want  -->
+  <!-- to create a completely dynamic UI.        -->
+  <!--                                           -->
+  <body>
+
+    <!-- OPTIONAL: include this if you want history support -->
+    <iframe src="javascript:''" id="__gwt_historyFrame" tabIndex='-1' style="position:absolute;width:0;height:0;border:0"></iframe>
+  </body>
+</html>

Added: labs/hupa/war/WEB-INF/lib/gwt-servlet.jar
URL: http://svn.apache.org/viewvc/labs/hupa/war/WEB-INF/lib/gwt-servlet.jar?rev=788864&view=auto
==============================================================================
Binary file - no diff available.

Propchange: labs/hupa/war/WEB-INF/lib/gwt-servlet.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: labs/hupa/war/WEB-INF/web.xml
URL: http://svn.apache.org/viewvc/labs/hupa/war/WEB-INF/web.xml?rev=788864&view=auto
==============================================================================
--- labs/hupa/war/WEB-INF/web.xml (added)
+++ labs/hupa/war/WEB-INF/web.xml Fri Jun 26 20:43:11 2009
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE web-app
+    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
+    "http://java.sun.com/dtd/web-app_2_3.dtd">
+
+<web-app>
+
+  <!-- Default page to serve -->
+  <welcome-file-list>
+    <welcome-file>Hupa.html</welcome-file>
+  </welcome-file-list>
+  
+  <!-- Servlets -->
+  <servlet>
+    <servlet-name>imapServlet</servlet-name>
+    <servlet-class>org.apache.hupa.server.IMAPServiceImpl</servlet-class>
+  </servlet>
+  
+  <servlet-mapping>
+    <servlet-name>imapServlet</servlet-name>
+    <url-pattern>/hupa/imap</url-pattern>
+  </servlet-mapping>
+  
+
+</web-app>

Added: labs/hupa/war/hupa/3B185B9ADE10EE20F5A5913D7AAD27A0.gwt.rpc
URL: http://svn.apache.org/viewvc/labs/hupa/war/hupa/3B185B9ADE10EE20F5A5913D7AAD27A0.gwt.rpc?rev=788864&view=auto
==============================================================================
--- labs/hupa/war/hupa/3B185B9ADE10EE20F5A5913D7AAD27A0.gwt.rpc (added)
+++ labs/hupa/war/hupa/3B185B9ADE10EE20F5A5913D7AAD27A0.gwt.rpc Fri Jun 26 20:43:11 2009
@@ -0,0 +1,28 @@
+com.google.gwt.i18n.client.impl.DateRecord, true
+com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException, true
+java.lang.Exception, false
+java.lang.RuntimeException, false
+java.lang.String, true
+java.lang.Throwable, false
+java.sql.Date, true
+java.sql.Time, true
+java.sql.Timestamp, true
+java.util.ArrayList, true
+java.util.Arrays$ArrayList, true
+java.util.Date, true
+java.util.LinkedList, true
+java.util.Stack, true
+java.util.Vector, true
+org.apache.hupa.client.services.IMAPServiceException, true
+org.apache.hupa.common.data.IMAPFolder, true
+[Lorg.apache.hupa.common.data.IMAPFolder;, true
+org.apache.hupa.common.data.IMAPHeader, true
+org.apache.hupa.common.data.IMAPMessage, true
+org.apache.hupa.common.data.IMAPMessage$IMAPFlag, true
+[Lorg.apache.hupa.common.data.IMAPMessage$IMAPFlag;, true
+org.apache.hupa.common.data.IMAPMessageAttachment, true
+[Lorg.apache.hupa.common.data.IMAPMessageAttachment;, true
+org.apache.hupa.common.data.IMAPMessageContent, true
+org.apache.hupa.common.data.IMAPUser, true
+org.apache.hupa.common.data.ResultList, true
+org.apache.hupa.common.data.Session, true

Added: labs/hupa/war/hupa/7060248520A1B3E97C76CABA13154B94.gwt.rpc
URL: http://svn.apache.org/viewvc/labs/hupa/war/hupa/7060248520A1B3E97C76CABA13154B94.gwt.rpc?rev=788864&view=auto
==============================================================================
--- labs/hupa/war/hupa/7060248520A1B3E97C76CABA13154B94.gwt.rpc (added)
+++ labs/hupa/war/hupa/7060248520A1B3E97C76CABA13154B94.gwt.rpc Fri Jun 26 20:43:11 2009
@@ -0,0 +1,27 @@
+com.google.gwt.i18n.client.impl.DateRecord, true
+com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException, true
+java.lang.Exception, false
+java.lang.RuntimeException, false
+java.lang.String, true
+java.lang.Throwable, false
+java.sql.Date, true
+java.sql.Time, true
+java.sql.Timestamp, true
+java.util.ArrayList, true
+java.util.Arrays$ArrayList, true
+java.util.Date, true
+java.util.LinkedList, true
+java.util.Stack, true
+java.util.Vector, true
+org.apache.hupa.client.services.IMAPServiceException, true
+org.apache.hupa.common.data.IMAPFolder, true
+[Lorg.apache.hupa.common.data.IMAPFolder;, true
+org.apache.hupa.common.data.IMAPHeader, true
+org.apache.hupa.common.data.IMAPMessage, true
+org.apache.hupa.common.data.IMAPMessage$IMAPFlag, true
+[Lorg.apache.hupa.common.data.IMAPMessage$IMAPFlag;, true
+org.apache.hupa.common.data.IMAPMessageAttachment, true
+[Lorg.apache.hupa.common.data.IMAPMessageAttachment;, true
+org.apache.hupa.common.data.IMAPMessageContent, true
+org.apache.hupa.common.data.IMAPUser, true
+org.apache.hupa.common.data.ResultList, true

Added: labs/hupa/war/hupa/E559B6073B872D90039FC7E6F45571E6.cache.png
URL: http://svn.apache.org/viewvc/labs/hupa/war/hupa/E559B6073B872D90039FC7E6F45571E6.cache.png?rev=788864&view=auto
==============================================================================
Binary file - no diff available.

Propchange: labs/hupa/war/hupa/E559B6073B872D90039FC7E6F45571E6.cache.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: labs/hupa/war/hupa/cbg-star.png
URL: http://svn.apache.org/viewvc/labs/hupa/war/hupa/cbg-star.png?rev=788864&view=auto
==============================================================================
Binary file - no diff available.

Propchange: labs/hupa/war/hupa/cbg-star.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: labs/hupa/war/hupa/cbg-stardeselected.png
URL: http://svn.apache.org/viewvc/labs/hupa/war/hupa/cbg-stardeselected.png?rev=788864&view=auto
==============================================================================
Binary file - no diff available.

Propchange: labs/hupa/war/hupa/cbg-stardeselected.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: labs/hupa/war/hupa/cbg-starhover.png
URL: http://svn.apache.org/viewvc/labs/hupa/war/hupa/cbg-starhover.png?rev=788864&view=auto
==============================================================================
Binary file - no diff available.

Propchange: labs/hupa/war/hupa/cbg-starhover.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: labs/hupa/war/hupa/cbg_button.css
URL: http://svn.apache.org/viewvc/labs/hupa/war/hupa/cbg_button.css?rev=788864&view=auto
==============================================================================
--- labs/hupa/war/hupa/cbg_button.css (added)
+++ labs/hupa/war/hupa/cbg_button.css Fri Jun 26 20:43:11 2009
@@ -0,0 +1,78 @@
+/* Button Style */
+
+/* specific for Opera */
+.cbg-ButtonContent::selection {
+  background-color:transparent;
+}
+
+.cbg-Button {
+  font-family: Arial, Helvetica, sans-serif;
+  font-size: 70%; /*relative to inherit 16px font-size*/
+}
+
+.cbg-Button .cbg-ButtonOuter {
+  border-color: #bcbcbc;
+}
+
+.cbg-Button .cbg-ButtonInner {
+  background-color: #e2e2e2;
+  border-color: #bcbcbc;
+}
+
+.cbg-Button .cbg-ButtonTop {
+  background-color: #f9f9f9;
+  border-bottom-color: #ededed;
+  border-bottom-width: 0.2em;
+  height: 0.9em;
+}
+
+.cbg-Button .cbg-ButtonContent {
+  color: black;
+  line-height: 1.8em;
+  padding: 0 8px;
+}
+
+.cbg-Button-active .cbg-ButtonInner {
+  background-color: #f9f9f9;
+}
+
+.cbg-Button-active  .cbg-ButtonTop {
+  background-color: #e2e2e2;
+}
+
+.cbg-Button-disabled .cbg-ButtonContent {
+  color: #878787;
+}
+
+.cbg-Button-hover .cbg-ButtonOuter {
+  border-color: #939393;
+}
+
+.cbg-Button-hover .cbg-ButtonInner {
+  border-color: #939393;
+}
+
+.cbg-Button-focus .cbg-ButtonOuter {
+  border-color: #444444;
+}
+
+.cbg-Button-focus .cbg-ButtonInner {
+  border-color: #444444;
+}
+
+/* ButtonBar specific style */
+.cbg-ButtonBar .cbg-BCLeft .cbg-ButtonInner {
+  border-left-color: white;
+}
+
+.cbg-ButtonBar .cbg-Button-hover .cbg-ButtonInner {
+  border-color: #939393;
+}
+
+.cbg-ButtonBar .cbg-Button-focus .cbg-ButtonInner {
+  border-color: #444444;
+}
+
+.cbg-ButtonBar .cbg-BCRight .cbg-ButtonInner {
+  border-right-color: #bcbcbc;
+}

Added: labs/hupa/war/hupa/clear.cache.gif
URL: http://svn.apache.org/viewvc/labs/hupa/war/hupa/clear.cache.gif?rev=788864&view=auto
==============================================================================
Binary file - no diff available.

Propchange: labs/hupa/war/hupa/clear.cache.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: labs/hupa/war/hupa/gwt/standard/images/corner.png
URL: http://svn.apache.org/viewvc/labs/hupa/war/hupa/gwt/standard/images/corner.png?rev=788864&view=auto
==============================================================================
Binary file - no diff available.

Propchange: labs/hupa/war/hupa/gwt/standard/images/corner.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: labs/hupa/war/hupa/gwt/standard/images/corner_ie6.png
URL: http://svn.apache.org/viewvc/labs/hupa/war/hupa/gwt/standard/images/corner_ie6.png?rev=788864&view=auto
==============================================================================
Binary file - no diff available.

Propchange: labs/hupa/war/hupa/gwt/standard/images/corner_ie6.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: labs/hupa/war/hupa/gwt/standard/images/hborder.png
URL: http://svn.apache.org/viewvc/labs/hupa/war/hupa/gwt/standard/images/hborder.png?rev=788864&view=auto
==============================================================================
Binary file - no diff available.

Propchange: labs/hupa/war/hupa/gwt/standard/images/hborder.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: labs/hupa/war/hupa/gwt/standard/images/hborder_ie6.png
URL: http://svn.apache.org/viewvc/labs/hupa/war/hupa/gwt/standard/images/hborder_ie6.png?rev=788864&view=auto
==============================================================================
Binary file - no diff available.

Propchange: labs/hupa/war/hupa/gwt/standard/images/hborder_ie6.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: labs/hupa/war/hupa/gwt/standard/images/ie6/corner_dialog_topleft.png
URL: http://svn.apache.org/viewvc/labs/hupa/war/hupa/gwt/standard/images/ie6/corner_dialog_topleft.png?rev=788864&view=auto
==============================================================================
Binary file - no diff available.

Propchange: labs/hupa/war/hupa/gwt/standard/images/ie6/corner_dialog_topleft.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: labs/hupa/war/hupa/gwt/standard/images/ie6/corner_dialog_topright.png
URL: http://svn.apache.org/viewvc/labs/hupa/war/hupa/gwt/standard/images/ie6/corner_dialog_topright.png?rev=788864&view=auto
==============================================================================
Binary file - no diff available.

Propchange: labs/hupa/war/hupa/gwt/standard/images/ie6/corner_dialog_topright.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: labs/hupa/war/hupa/gwt/standard/images/ie6/hborder_blue_shadow.png
URL: http://svn.apache.org/viewvc/labs/hupa/war/hupa/gwt/standard/images/ie6/hborder_blue_shadow.png?rev=788864&view=auto
==============================================================================
Binary file - no diff available.

Propchange: labs/hupa/war/hupa/gwt/standard/images/ie6/hborder_blue_shadow.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: labs/hupa/war/hupa/gwt/standard/images/ie6/hborder_gray_shadow.png
URL: http://svn.apache.org/viewvc/labs/hupa/war/hupa/gwt/standard/images/ie6/hborder_gray_shadow.png?rev=788864&view=auto
==============================================================================
Binary file - no diff available.

Propchange: labs/hupa/war/hupa/gwt/standard/images/ie6/hborder_gray_shadow.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: labs/hupa/war/hupa/gwt/standard/images/ie6/vborder_blue_shadow.png
URL: http://svn.apache.org/viewvc/labs/hupa/war/hupa/gwt/standard/images/ie6/vborder_blue_shadow.png?rev=788864&view=auto
==============================================================================
Binary file - no diff available.

Propchange: labs/hupa/war/hupa/gwt/standard/images/ie6/vborder_blue_shadow.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: labs/hupa/war/hupa/gwt/standard/images/ie6/vborder_gray_shadow.png
URL: http://svn.apache.org/viewvc/labs/hupa/war/hupa/gwt/standard/images/ie6/vborder_gray_shadow.png?rev=788864&view=auto
==============================================================================
Binary file - no diff available.

Propchange: labs/hupa/war/hupa/gwt/standard/images/ie6/vborder_gray_shadow.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: labs/hupa/war/hupa/gwt/standard/images/vborder.png
URL: http://svn.apache.org/viewvc/labs/hupa/war/hupa/gwt/standard/images/vborder.png?rev=788864&view=auto
==============================================================================
Binary file - no diff available.

Propchange: labs/hupa/war/hupa/gwt/standard/images/vborder.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: labs/hupa/war/hupa/gwt/standard/images/vborder_ie6.png
URL: http://svn.apache.org/viewvc/labs/hupa/war/hupa/gwt/standard/images/vborder_ie6.png?rev=788864&view=auto
==============================================================================
Binary file - no diff available.

Propchange: labs/hupa/war/hupa/gwt/standard/images/vborder_ie6.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: labs/hupa/war/hupa/gwt/standard/standard.css
URL: http://svn.apache.org/viewvc/labs/hupa/war/hupa/gwt/standard/standard.css?rev=788864&view=auto
==============================================================================
--- labs/hupa/war/hupa/gwt/standard/standard.css (added)
+++ labs/hupa/war/hupa/gwt/standard/standard.css Fri Jun 26 20:43:11 2009
@@ -0,0 +1,1076 @@
+/**
+ * The file contains styles for GWT widgets in the standard theme.
+ *
+ * In order to maintain cross-browser compatibility, the following syntax is
+ * used to create IE6 specific style rules:
+ *    .gwt-Widget {
+ *      property: rule applies to all browsers
+ *      -property: rule applies only to IE6 (overrides previous rule)
+ *    }
+ *    * html .gwt-Widget {
+ *      property: rule applies to all versions of IE
+ *    }
+ */
+
+body, table td, select {
+  font-family: Arial Unicode MS, Arial, sans-serif;
+  font-size: small;
+}
+pre {
+  font-family: "courier new", courier;
+  font-size: small;
+}
+body {
+  color: black;
+  margin: 0px;
+  border: 0px;
+  padding: 0px;
+  background: #fff;
+  direction: ltr;
+}
+a, a:visited, a:hover {
+  color: #0000AA;
+}
+
+/**
+ * The reference theme can be used to determine when this style sheet has
+ * loaded.  Create a hidden div element with absolute position, assign the style
+ * name below, and attach it to the DOM.  Use a timer to detect when the
+ * element's height and width are set to 5px.
+ */
+.gwt-Reference-standard {
+  height: 5px;
+  width: 5px;
+  zoom: 1;
+}
+
+.gwt-Button {
+  margin: 0;
+  padding: 3px 5px;
+  text-decoration: none;
+  font-size: small;
+  cursor: pointer;
+  cursor: hand;
+  background: url("images/hborder.png") repeat-x 0px -27px;
+  border: 1px outset #ccc;
+}
+.gwt-Button:active {
+  border: 1px inset #ccc;
+}
+.gwt-Button:hover {
+  border-color: #9cf #69e #69e #7af;
+}
+.gwt-Button[disabled] {
+  cursor: default;
+  color: #888;
+}
+.gwt-Button[disabled]:hover {
+  border: 1px outset #ccc;
+}
+
+.gwt-CheckBox {
+}
+.gwt-CheckBox-disabled {
+  color: #888;
+}
+
+.gwt-DecoratorPanel {
+}
+.gwt-DecoratorPanel .topCenter,
+.gwt-DecoratorPanel .bottomCenter {
+  background: url(images/hborder.png) repeat-x;
+}
+.gwt-DecoratorPanel .middleLeft,
+.gwt-DecoratorPanel .middleRight {
+  background: url(images/vborder.png) repeat-y;
+}
+.gwt-DecoratorPanel .topLeftInner,
+.gwt-DecoratorPanel .topRightInner,
+.gwt-DecoratorPanel .bottomLeftInner,
+.gwt-DecoratorPanel .bottomRightInner {
+  width: 5px;
+  height: 5px;
+  zoom: 1;
+}
+.gwt-DecoratorPanel .topLeft {
+  background: url(images/corner.png) no-repeat 0px 0px;
+  -background: url(images/corner_ie6.png) no-repeat 0px 0px;
+}
+.gwt-DecoratorPanel .topRight {
+  background: url(images/corner.png) no-repeat -5px 0px;
+  -background: url(images/corner_ie6.png) no-repeat -5px 0px;
+}
+.gwt-DecoratorPanel .bottomLeft {
+  background: url(images/corner.png) no-repeat 0px -5px;
+  -background: url(images/corner_ie6.png) no-repeat 0px -5px;
+}
+.gwt-DecoratorPanel .bottomRight {
+  background: url(images/corner.png) no-repeat -5px -5px;
+  -background: url(images/corner_ie6.png) no-repeat -5px -5px;
+}
+* html .gwt-DecoratorPanel .topLeftInner,
+* html .gwt-DecoratorPanel .topRightInner,
+* html .gwt-DecoratorPanel .bottomLeftInner,
+* html .gwt-DecoratorPanel .bottomRightInner {
+  width: 5px;
+  height: 5px;
+  overflow: hidden;
+}
+
+.gwt-DialogBox .Caption {
+  background: #e3e8f3 url(images/hborder.png) repeat-x 0px -2003px;
+  padding: 4px 4px 4px 8px;
+  cursor: default;
+  border-bottom: 1px solid #bbbbbb;
+  border-top: 5px solid #d0e4f6;
+}
+.gwt-DialogBox .dialogContent {
+}
+.gwt-DialogBox .dialogMiddleCenter {
+  padding: 3px;
+  background: white;
+}
+.gwt-DialogBox .dialogBottomCenter {
+  background: url(images/hborder.png) repeat-x 0px -4px;
+  -background: url(images/hborder_ie6.png) repeat-x 0px -4px;
+}
+.gwt-DialogBox .dialogMiddleLeft {
+  background: url(images/vborder.png) repeat-y;
+}
+.gwt-DialogBox .dialogMiddleRight {
+  background: url(images/vborder.png) repeat-y -4px 0px;
+  -background: url(images/vborder_ie6.png) repeat-y -4px 0px;
+}
+.gwt-DialogBox .dialogTopLeftInner {
+  width: 5px;
+  zoom: 1;
+}
+.gwt-DialogBox .dialogTopRightInner {
+  width: 8px;
+  zoom: 1;
+}
+.gwt-DialogBox .dialogBottomLeftInner {
+  width: 5px;
+  height: 8px;
+  zoom: 1;
+}
+.gwt-DialogBox .dialogBottomRightInner {
+  width: 5px;
+  height: 8px;
+  zoom: 1;
+}
+.gwt-DialogBox .dialogTopLeft {
+  background: url(images/corner.png) no-repeat -13px 0px;
+  -background: url(images/corner_ie6.png) no-repeat -13px 0px;
+}
+.gwt-DialogBox .dialogTopRight {
+  background: url(images/corner.png) no-repeat -18px 0px;
+  -background: url(images/corner_ie6.png) no-repeat -18px 0px;
+}
+.gwt-DialogBox .dialogBottomLeft {
+  background: url(images/corner.png) no-repeat 0px -15px;
+  -background: url(images/corner_ie6.png) no-repeat 0px -15px;
+}
+.gwt-DialogBox .dialogBottomRight {
+  background: url(images/corner.png) no-repeat -5px -15px;
+  -background: url(images/corner_ie6.png) no-repeat -5px -15px;
+}
+* html .gwt-DialogBox .dialogTopLeftInner {
+  width: 5px;
+  overflow: hidden;
+}
+* html .gwt-DialogBox .dialogTopRightInner {
+  width: 8px;
+  overflow: hidden;
+}
+* html .gwt-DialogBox .dialogBottomLeftInner {
+  width: 5px;
+  height: 8px;
+  overflow: hidden;
+}
+* html .gwt-DialogBox .dialogBottomRightInner {
+  width: 8px;
+  height: 8px;
+  overflow: hidden;
+}
+
+.gwt-DisclosurePanel {
+}
+.gwt-DisclosurePanel-open {
+}
+.gwt-DisclosurePanel-closed {
+}
+.gwt-DisclosurePanel .header,
+.gwt-DisclosurePanel .header a,
+.gwt-DisclosurePanel .header td {
+  text-decoration: none;  /* Remove underline from header */
+  color: black; 
+  cursor: pointer;
+  cursor: hand;
+}
+.gwt-DisclosurePanel .content {
+  border-left: 3px solid #e8eef7;
+  padding: 4px 0px 4px 8px;
+  margin-left: 6px;
+}
+
+.gwt-FileUpload {
+}
+
+.gwt-Frame {
+  border-top: 2px solid #666;
+  border-left: 2px solid #666;
+  border-right: 2px solid #bbb;
+  border-bottom: 2px solid #bbb;
+}
+
+.gwt-HorizontalSplitPanel {
+}
+.gwt-HorizontalSplitPanel .hsplitter {
+  cursor: move;
+  border: 0px; 
+  background: #91c0ef url(images/vborder.png) repeat-y;
+}
+.gwt-VerticalSplitPanel {
+}
+.gwt-VerticalSplitPanel .vsplitter {
+  cursor: move;
+  border: 0px; 
+  background: #91c0ef url(images/hborder.png) repeat-x;
+}
+
+.gwt-HTML {
+}
+
+.gwt-Hyperlink {
+}
+
+.gwt-Image {
+}
+
+.gwt-Label {
+}
+
+.gwt-ListBox {
+}
+
+.gwt-MenuBar {
+  cursor: default;
+}
+.gwt-MenuBar .gwt-MenuItem {
+  cursor: default;
+}
+.gwt-MenuBar .gwt-MenuItem-selected {
+  background: #E0EDFE;
+}
+.gwt-MenuBar-horizontal {
+  background: #e3e8f3 url(images/hborder.png) repeat-x 0px -2003px;
+  border: 1px solid #BBBBBB;
+}
+.gwt-MenuBar-horizontal .gwt-MenuItem {
+  padding: 0px 10px;
+  vertical-align: bottom;
+  color: #666666;
+  font-weight: bold;
+}
+.gwt-MenuBar-horizontal .gwt-MenuItemSeparator {
+  width: 1px;
+  padding: 0px;
+  margin: 0px;
+  border: 0px;
+  border-left: 1px solid #888888;
+  background: white;
+}
+.gwt-MenuBar-horizontal .gwt-MenuItemSeparator .menuSeparatorInner {
+  width: 1px;
+  height: 1px;
+  background: white; 
+}
+.gwt-MenuBar-vertical {
+  margin-top: 0px;
+  margin-left: 0px;
+  background: white;
+}
+.gwt-MenuBar-vertical table {
+  border-collapse: collapse;
+}
+.gwt-MenuBar-vertical .gwt-MenuItem {
+  padding: 4px 14px 4px 1px;
+}
+.gwt-MenuBar-vertical .gwt-MenuItemSeparator {
+  padding: 2px 0px;
+}
+.gwt-MenuBar-vertical .gwt-MenuItemSeparator .menuSeparatorInner {
+  height: 1px;
+  padding: 0px;
+  border: 0px;
+  border-top: 1px solid #777777;
+  background: #ddddee;
+  overflow: hidden;
+}
+.gwt-MenuBar-vertical .subMenuIcon {
+  padding-right: 4px;
+}
+.gwt-MenuBar-vertical .subMenuIcon-selected {
+  background: #E0EDFE;
+}
+.gwt-MenuBarPopup {
+  margin: 0px 0px 0px 3px;
+}
+.gwt-MenuBarPopup .menuPopupTopCenter {
+  background: url(images/hborder.png) 0px -12px repeat-x;
+}
+.gwt-MenuBarPopup .menuPopupBottomCenter {
+  background: url(images/hborder.png) 0px -13px repeat-x;
+  -background: url(images/hborder_ie6.png) 0px -13px repeat-x;
+}
+.gwt-MenuBarPopup .menuPopupMiddleLeft {
+  background: url(images/vborder.png) -12px 0px repeat-y;
+  -background: url(images/vborder_ie6.png) -12px 0px repeat-y;
+}
+.gwt-MenuBarPopup .menuPopupMiddleRight {
+  background: url(images/vborder.png) -13px 0px repeat-y;
+  -background: url(images/vborder_ie6.png) -13px 0px repeat-y;
+}
+.gwt-MenuBarPopup .menuPopupTopLeftInner {
+  width: 5px;
+  height: 5px;
+  zoom: 1;
+}
+.gwt-MenuBarPopup .menuPopupTopRightInner {
+  width: 8px;
+  height: 5px;
+  zoom: 1;
+}
+.gwt-MenuBarPopup .menuPopupBottomLeftInner {
+  width: 5px;
+  height: 8px;
+  zoom: 1;
+}
+.gwt-MenuBarPopup .menuPopupBottomRightInner {
+  width: 8px;
+  height: 8px;
+  zoom: 1;
+}
+.gwt-MenuBarPopup .menuPopupTopLeft {
+  background: url(images/corner.png) no-repeat 0px -36px;
+  -background: url(images/corner_ie6.png) no-repeat 0px -36px;
+}
+.gwt-MenuBarPopup .menuPopupTopRight {
+  background: url(images/corner.png) no-repeat -5px -36px;
+  -background: url(images/corner_ie6.png) no-repeat -5px -36px;
+}
+.gwt-MenuBarPopup .menuPopupBottomLeft {
+  background: url(images/corner.png) no-repeat 0px -41px;
+  -background: url(images/corner_ie6.png) no-repeat 0px -41px;
+}
+.gwt-MenuBarPopup .menuPopupBottomRight {
+  background: url(images/corner.png) no-repeat -5px -41px;
+  -background: url(images/corner_ie6.png) no-repeat -5px -41px;
+}
+* html .gwt-MenuBarPopup .menuPopupTopLeftInner {
+  width: 5px;
+  height: 5px;
+  overflow: hidden;
+}
+* html .gwt-MenuBarPopup .menuPopupTopRightInner {
+  width: 8px;
+  height: 5px;
+  overflow: hidden;
+}
+* html .gwt-MenuBarPopup .menuPopupBottomLeftInner {
+  width: 5px;
+  height: 8px;
+  overflow: hidden;
+}
+* html .gwt-MenuBarPopup .menuPopupBottomRightInner {
+  width: 8px;
+  height: 8px;
+  overflow: hidden;
+}
+
+.gwt-PasswordTextBox {
+  padding: 2px;
+}
+.gwt-PasswordTextBox-readonly {
+  color: #888;
+}
+
+.gwt-PopupPanel {
+  border: 3px solid #C3D9FF;
+  padding: 3px;
+  background: white;
+}
+
+.gwt-DecoratedPopupPanel .popupContent {
+}
+.gwt-DecoratedPopupPanel .popupMiddleCenter {
+  padding: 3px;
+  background: #d0e4f6;
+}
+.gwt-DecoratedPopupPanel .popupTopCenter {
+  background: url(images/hborder.png) repeat-x;
+}
+.gwt-DecoratedPopupPanel .popupBottomCenter {
+  background: url(images/hborder.png) repeat-x 0px -4px;
+  -background: url(images/hborder_ie6.png) repeat-x 0px -4px;
+}
+.gwt-DecoratedPopupPanel .popupMiddleLeft {
+  background: url(images/vborder.png) repeat-y;
+}
+.gwt-DecoratedPopupPanel .popupMiddleRight {
+  background: url(images/vborder.png) repeat-y -4px 0px;
+  -background: url(images/vborder_ie6.png) repeat-y -4px 0px;
+}
+.gwt-DecoratedPopupPanel .popupTopLeftInner {
+  width: 5px;
+  height: 5px;
+  zoom: 1;
+}
+.gwt-DecoratedPopupPanel .popupTopRightInner {
+  width: 8px;
+  height: 5px;
+  zoom: 1;
+}
+.gwt-DecoratedPopupPanel .popupBottomLeftInner {
+  width: 5px;
+  height: 8px;
+  zoom: 1;
+}
+.gwt-DecoratedPopupPanel .popupBottomRightInner {
+  width: 8px;
+  height: 8px;
+  zoom: 1;
+}
+.gwt-DecoratedPopupPanel .popupTopLeft {
+  background: url(images/corner.png) no-repeat 0px -10px;
+  -background: url(images/corner_ie6.png) no-repeat 0px -10px;
+}
+.gwt-DecoratedPopupPanel .popupTopRight {
+  background: url(images/corner.png) no-repeat -5px -10px;
+  -background: url(images/corner_ie6.png) no-repeat -5px -10px;
+}
+.gwt-DecoratedPopupPanel .popupBottomLeft {
+  background: url(images/corner.png) no-repeat 0px -15px;
+  -background: url(images/corner_ie6.png) no-repeat 0px -15px;
+}
+.gwt-DecoratedPopupPanel .popupBottomRight {
+  background: url(images/corner.png) no-repeat -5px -15px;
+  -background: url(images/corner_ie6.png) no-repeat -5px -15px;
+}
+* html .gwt-DecoratedPopupPanel .popupTopLeftInner {
+  width: 5px;
+  height: 5px;
+  overflow: hidden;
+}
+* html .gwt-DecoratedPopupPanel .popupTopRightInner {
+  width: 8px;
+  height: 5px;
+  overflow: hidden;
+}
+* html .gwt-DecoratedPopupPanel .popupBottomLeftInner {
+  width: 5px;
+  height: 8px;
+  overflow: hidden;
+}
+* html .gwt-DecoratedPopupPanel .popupBottomRightInner {
+  width: 8px;
+  height: 8px;
+  overflow: hidden;
+}
+
+.gwt-PushButton-up,
+.gwt-PushButton-up-hovering,
+.gwt-PushButton-up-disabled,
+.gwt-PushButton-down,
+.gwt-PushButton-down-hovering,
+.gwt-PushButton-down-disabled {
+  margin: 0;
+  text-decoration: none;
+  background: url("images/hborder.png") repeat-x 0px -27px;
+}
+.gwt-PushButton-up,
+.gwt-PushButton-up-hovering,
+.gwt-PushButton-up-disabled {
+  padding: 3px 5px 3px 5px;
+}
+.gwt-PushButton-up {
+  border: 1px outset #ccc;
+  cursor: pointer;
+  cursor: hand;
+}
+.gwt-PushButton-up-hovering {
+  border: 1px outset;
+  border-color: #9cf #69e #69e #7af;
+  cursor: pointer;
+  cursor: hand;
+}
+.gwt-PushButton-up-disabled {
+  border: 1px outset #ccc;
+  cursor: default;
+  opacity: .5;
+  filter: alpha(opacity=40);
+  zoom: 1;
+}
+.gwt-PushButton-down,
+.gwt-PushButton-down-hovering,
+.gwt-PushButton-down-disabled {
+  padding: 4px 4px 2px 6px;
+}
+.gwt-PushButton-down {
+  border: 1px inset #666;
+  cursor: pointer;
+  cursor: hand;
+}
+.gwt-PushButton-down-hovering {
+  border: 1px inset;
+  border-color: #9cf #69e #69e #7af;
+  cursor: pointer;
+  cursor: hand;
+}
+.gwt-PushButton-down-disabled {
+  border: 1px outset #ccc;
+  cursor: default;
+  opacity: 0.5;
+  filter: alpha(opacity=40);
+  zoom: 1;
+}
+
+.gwt-RadioButton {
+}
+.gwt-RadioButton-disabled {
+  color: #888;
+}
+
+.gwt-RichTextArea {
+}
+.hasRichTextToolbar {
+  border: 0px;
+}
+.gwt-RichTextToolbar {
+  background: #e3e8f3 url(images/hborder.png) repeat-x 0px -2003px;
+  border-bottom: 1px solid #BBBBBB;
+  padding: 3px;
+  margin: 0px;
+}
+.gwt-RichTextToolbar .gwt-PushButton-up {
+  padding: 0px 1px 0px 0px;
+  margin-right: 4px;
+  margin-bottom: 4px;
+  border-width: 1px; 
+}
+.gwt-RichTextToolbar .gwt-PushButton-up-hovering {
+  margin-right: 4px;
+  margin-bottom: 4px;
+  padding: 0px 1px 0px 0px;
+  border-width: 1px; 
+}
+.gwt-RichTextToolbar .gwt-PushButton-down {
+  margin-right: 4px;
+  margin-bottom: 4px;
+  padding: 0px 0px 0px 1px;
+  border-width: 1px; 
+}
+.gwt-RichTextToolbar .gwt-PushButton-down-hovering {
+  margin-right: 4px;
+  margin-bottom: 4px;
+  padding: 0px 0px 0px 1px;
+  border-width: 1px; 
+}
+.gwt-RichTextToolbar .gwt-ToggleButton-up {
+  margin-right: 4px;
+  margin-bottom: 4px;
+  padding: 0px 1px 0px 0px;
+  border-width: 1px;
+}
+.gwt-RichTextToolbar .gwt-ToggleButton-up-hovering {
+  margin-right: 4px;
+  margin-bottom: 4px;
+  padding: 0px 1px 0px 0px;
+  border-width: 1px;
+}
+.gwt-RichTextToolbar .gwt-ToggleButton-down {
+  margin-right: 4px;
+  margin-bottom: 4px;
+  padding: 0px 0px 0px 1px;
+  border-width: 1px;
+}
+.gwt-RichTextToolbar .gwt-ToggleButton-down-hovering {
+  margin-right: 4px;
+  margin-bottom: 4px;
+  padding: 0px 0px 0px 1px;
+  border-width: 1px;
+}
+
+.gwt-StackPanel {
+  border-bottom: 1px solid #bbbbbb;
+}
+.gwt-StackPanel .gwt-StackPanelItem {
+  cursor: pointer;
+  cursor: hand;
+  font-weight: bold;
+  font-size: 1.3em;
+  padding: 3px;
+  border: 1px solid #bbbbbb;
+  border-bottom: 0px;
+  background: #d3def6 url(images/hborder.png) repeat-x 0px -989px;
+}
+.gwt-StackPanel .gwt-StackPanelContent {
+  border: 1px solid #bbbbbb;
+  border-bottom: 0px;
+  background: white;
+  padding: 2px 2px 10px 5px;
+}
+
+.gwt-DecoratedStackPanel {
+  border-bottom: 1px solid #bbbbbb;
+}
+.gwt-DecoratedStackPanel .gwt-StackPanelContent {
+  border: 1px solid #bbbbbb;
+  border-bottom: 0px;
+  background: white;
+  padding: 2px 2px 10px 5px;
+}
+.gwt-DecoratedStackPanel .gwt-StackPanelItem {
+  cursor: pointer;
+  cursor: hand;
+}
+.gwt-DecoratedStackPanel .stackItemTopLeft,
+.gwt-DecoratedStackPanel .stackItemTopRight {
+  height: 6px;
+  width: 6px;
+  zoom: 1;
+}
+.gwt-DecoratedStackPanel .stackItemTopLeft {
+  border-left: 1px solid #bbbbbb;
+  background: #d3def6 url(images/corner.png) no-repeat 0px -49px;
+  -background: #d3def6 url(images/corner_ie6.png) no-repeat 0px -49px;
+}
+.gwt-DecoratedStackPanel .stackItemTopRight {
+  border-right: 1px solid #bbbbbb;
+  background: #d3def6 url(images/corner.png) no-repeat -6px -49px;
+  -background: #d3def6 url(images/corner_ie6.png) no-repeat -6px -49px;
+}
+.gwt-DecoratedStackPanel .stackItemTopLeftInner,
+.gwt-DecoratedStackPanel .stackItemTopRightInner {
+  width: 1px;
+  height: 1px;
+}
+* html .gwt-DecoratedStackPanel .stackItemTopLeftInner,
+* html .gwt-DecoratedStackPanel .stackItemTopRightInner {
+  width: 6px;
+  height: 6px;
+  overflow: hidden;
+}
+.gwt-DecoratedStackPanel .stackItemTopCenter {
+  background: url(images/hborder.png) 0px -21px repeat-x;
+}
+.gwt-DecoratedStackPanel .stackItemMiddleLeft {
+  background: #d3def6 url(images/hborder.png) repeat-x 0px -989px;
+  border-left: 1px solid #bbbbbb;
+}
+.gwt-DecoratedStackPanel .stackItemMiddleLeftInner,
+.gwt-DecoratedStackPanel .stackItemMiddleRightInner {
+  width: 1px;
+  height: 1px;
+}
+.gwt-DecoratedStackPanel .stackItemMiddleRight {
+  background: #d3def6 url(images/hborder.png) repeat-x 0px -989px;
+  border-right: 1px solid #bbbbbb;
+}
+.gwt-DecoratedStackPanel .stackItemMiddleCenter {
+  font-weight: bold;
+  font-size: 1.3em;
+  background: #d3def6 url(images/hborder.png) repeat-x 0px -989px;
+}
+.gwt-DecoratedStackPanel .gwt-StackPanelItem-first .stackItemTopRight,
+.gwt-DecoratedStackPanel .gwt-StackPanelItem-first .stackItemTopLeft {
+  border: 0px;
+  background-color: white;
+}
+.gwt-DecoratedStackPanel .gwt-StackPanelItem-below-selected .stackItemTopLeft,
+.gwt-DecoratedStackPanel .gwt-StackPanelItem-below-selected .stackItemTopRight {
+  background-color: white;
+}
+
+.gwt-SuggestBox {
+  padding: 2px;
+}
+.gwt-SuggestBoxPopup {
+  margin-left: 3px;
+}
+.gwt-SuggestBoxPopup .item {
+  padding: 2px 6px;
+  color: #424242;
+  cursor: default;
+}
+.gwt-SuggestBoxPopup .item-selected {
+  background: #b7d6f6;
+}
+.gwt-SuggestBoxPopup .suggestPopupContent {
+  background: white;
+}
+.gwt-SuggestBoxPopup .suggestPopupTopCenter {
+  background: url(images/hborder.png) repeat-x;
+}
+.gwt-SuggestBoxPopup .suggestPopupBottomCenter {
+  background: url(images/hborder.png) repeat-x 0px -4px;
+  -background: url(images/hborder_ie6.png) repeat-x 0px -4px;
+}
+.gwt-SuggestBoxPopup .suggestPopupMiddleLeft {
+  background: url(images/vborder.png) repeat-y;
+}
+.gwt-SuggestBoxPopup .suggestPopupMiddleRight {
+  background: url(images/vborder.png) repeat-y -4px 0px;
+  -background: url(images/vborder_ie6.png) repeat-y -4px 0px;
+}
+.gwt-SuggestBoxPopup .suggestPopupTopLeftInner {
+  width: 5px;
+  height: 5px;
+  zoom: 1;  
+}
+.gwt-SuggestBoxPopup .suggestPopupTopRightInner {
+  width: 8px;
+  height: 5px;
+  zoom: 1;
+}
+.gwt-SuggestBoxPopup .suggestPopupBottomLeftInner {
+  width: 5px;
+  height: 8px;
+  zoom: 1;
+}
+.gwt-SuggestBoxPopup .suggestPopupBottomRightInner {
+  width: 8px;
+  height: 8px;
+  zoom: 1;
+}
+.gwt-SuggestBoxPopup .suggestPopupTopLeft {
+  background: url(images/corner.png) no-repeat 0px -23px;
+  -background: url(images/corner_ie6.png) no-repeat 0px -23px;
+}
+.gwt-SuggestBoxPopup .suggestPopupTopRight {
+  background: url(images/corner.png) no-repeat -5px -23px;
+  -background: url(images/corner_ie6.png) no-repeat -5px -23px;
+}
+.gwt-SuggestBoxPopup .suggestPopupBottomLeft {
+  background: url(images/corner.png) no-repeat 0px -28px;
+  -background: url(images/corner_ie6.png) no-repeat 0px -28px;
+}
+.gwt-SuggestBoxPopup .suggestPopupBottomRight {
+  background: url(images/corner.png) no-repeat -5px -28px;
+  -background: url(images/corner_ie6.png) no-repeat -5px -28px;
+}
+* html .gwt-SuggestBoxPopup .suggestPopupTopLeftInner {
+  width: 5px;
+  height: 5px;
+  overflow: hidden;
+}
+* html .gwt-SuggestBoxPopup .suggestPopupTopRightInner {
+  width: 8px;
+  height: 5px;
+  overflow: hidden;
+}
+* html .gwt-SuggestBoxPopup .suggestPopupBottomLeftInner {
+  width: 5px;
+  height: 8px;
+  overflow: hidden;
+}
+* html .gwt-SuggestBoxPopup .suggestPopupBottomRightInner {
+  width: 8px;
+  height: 8px;
+  overflow: hidden;
+}
+
+.gwt-TabBar {
+}
+.gwt-TabBar .gwt-TabBarFirst {
+  width: 5px;  /* first tab distance from the left */
+}
+.gwt-TabBar .gwt-TabBarRest {
+}
+.gwt-TabBar .gwt-TabBarItem {
+  margin-left: 6px;
+  padding: 3px 6px 3px 6px;
+  cursor: pointer;
+  cursor: hand;
+  color: black;
+  font-weight: bold;
+  text-align: center;
+  background: #d0e4f6;
+}
+.gwt-TabBar .gwt-TabBarItem-selected {
+  cursor: default;
+  background: #92c1f0;
+} 
+.gwt-TabBar .gwt-TabBarItem-disabled {
+  cursor: default;
+  color: #999999;
+}
+.gwt-TabPanel {
+}
+.gwt-TabPanelBottom {
+  border-color: #92c1f0;
+  border-style: solid;
+  border-width: 3px 2px 2px;
+  overflow: hidden;
+  padding: 6px;
+}
+
+.gwt-DecoratedTabBar {
+}
+.gwt-DecoratedTabBar .gwt-TabBarFirst {
+  width: 5px;  /* first tab distance from the left */
+}
+.gwt-DecoratedTabBar .gwt-TabBarRest {
+}
+.gwt-DecoratedTabBar .gwt-TabBarItem {
+  border-collapse: collapse;
+  margin-left: 6px;
+}
+.gwt-DecoratedTabBar .tabTopCenter {
+  padding: 0px;
+  background: #d0e4f6;
+}
+.gwt-DecoratedTabBar .tabTopLeft,
+.gwt-DecoratedTabBar .tabTopRight {
+  padding: 0px;
+  zoom: 1;
+}
+.gwt-DecoratedTabBar .tabTopLeftInner,
+.gwt-DecoratedTabBar .tabTopRightInner {
+  width: 6px;
+  height: 6px;
+}
+.gwt-DecoratedTabBar .tabTopLeft {
+  background: url(images/corner.png) no-repeat 0px -55px;
+  -background: url(images/corner_ie6.png) no-repeat 0px -55px;
+}
+.gwt-DecoratedTabBar .tabTopRight {
+  background: url(images/corner.png) no-repeat -6px -55px;
+  -background: url(images/corner_ie6.png) no-repeat -6px -55px;
+}
+* html .gwt-DecoratedTabBar .tabTopLeftInner,
+* html .gwt-DecoratedTabBar .tabTopRightInner {
+  width: 6px;
+  height: 6px;
+  overflow: hidden;
+}
+.gwt-DecoratedTabBar .tabMiddleLeft,
+.gwt-DecoratedTabBar .tabMiddleRight {
+  width: 6px;
+  padding: 0px;
+  background: #d0e4f6;
+}
+.gwt-DecoratedTabBar .tabMiddleLeftInner,
+.gwt-DecoratedTabBar .tabMiddleRightInner {
+  width: 1px;
+  height: 1px;
+}
+.gwt-DecoratedTabBar .tabMiddleCenter {
+  padding: 0px 4px 2px 4px;
+  cursor: pointer;
+  cursor: hand;
+  color: black;
+  font-weight: bold;
+  text-align: center;
+  background: #d0e4f6;
+}
+.gwt-DecoratedTabBar .gwt-TabBarItem-selected .tabTopCenter {
+  background: #92c1f0;
+}
+.gwt-DecoratedTabBar .gwt-TabBarItem-selected .tabTopLeft {
+  background-position: 0px -61px;
+}
+.gwt-DecoratedTabBar .gwt-TabBarItem-selected .tabTopRight {
+  background-position: -6px -61px;
+}
+.gwt-DecoratedTabBar .gwt-TabBarItem-selected .tabMiddleLeft,
+.gwt-DecoratedTabBar .gwt-TabBarItem-selected .tabMiddleRight {
+  background: #92c1f0;
+}
+.gwt-DecoratedTabBar .gwt-TabBarItem-selected .tabMiddleCenter {
+  cursor: default;
+  background: #92c1f0;
+}
+.gwt-DecoratedTabBar .gwt-TabBarItem-disabled .tabMiddleCenter {
+  cursor: default;
+  color: #999999;
+}
+
+.gwt-TextArea {
+  padding: 2px;
+}
+.gwt-TextArea-readonly {
+  color: #888;
+}
+
+.gwt-TextBox {
+  padding: 2px;
+}
+.gwt-TextBox-readonly {
+  color: #888;
+}
+
+.gwt-ToggleButton-up,
+.gwt-ToggleButton-up-hovering,
+.gwt-ToggleButton-up-disabled,
+.gwt-ToggleButton-down,
+.gwt-ToggleButton-down-hovering,
+.gwt-ToggleButton-down-disabled {
+  margin: 0;
+  text-decoration: none;
+  background: url("images/hborder.png") repeat-x 0px -27px;
+}
+.gwt-ToggleButton-up,
+.gwt-ToggleButton-up-hovering,
+.gwt-ToggleButton-up-disabled {
+  padding: 3px 5px 3px 5px;
+}
+.gwt-ToggleButton-up {
+  border: 1px outset #ccc;
+  cursor: pointer;
+  cursor: hand;
+}
+.gwt-ToggleButton-up-hovering {
+  border: 1px outset;
+  border-color: #9cf #69e #69e #7af;
+  cursor: pointer;
+  cursor: hand;
+}
+.gwt-ToggleButton-up-disabled {
+  border: 1px outset #ccc;
+  cursor: default;
+  opacity: .5;
+  zoom: 1;
+  filter: alpha(opacity=40);
+}
+.gwt-ToggleButton-down,
+.gwt-ToggleButton-down-hovering,
+.gwt-ToggleButton-down-disabled {
+  padding: 4px 4px 2px 6px;
+}
+.gwt-ToggleButton-down {
+  background-position: 0 -513px;
+  border: 1px inset #ccc;
+  cursor: pointer;
+  cursor: hand;
+}
+.gwt-ToggleButton-down-hovering {
+  background-position: 0 -513px;
+  border: 1px inset;
+  border-color: #9cf #69e #69e #7af;
+  cursor: pointer;
+  cursor: hand;
+}
+.gwt-ToggleButton-down-disabled {
+  background-position: 0 -513px;
+  border: 1px inset #ccc;
+  cursor: default;
+  opacity: .5;
+  zoom: 1;
+  filter: alpha(opacity=40);
+}
+
+.gwt-Tree .gwt-TreeItem {
+  padding: 1px 0px;
+  margin: 0px;
+  white-space: nowrap;
+  cursor: hand;
+  cursor: pointer;
+}
+.gwt-Tree .gwt-TreeItem-selected {
+  background: #93c2f1 url(images/hborder.png) repeat-x 0px -1463px;
+}
+.gwt-TreeItem .gwt-RadioButton input,
+.gwt-TreeItem .gwt-CheckBox input {
+  margin-left: 0px;
+}
+* html .gwt-TreeItem .gwt-RadioButton input,
+* html .gwt-TreeItem .gwt-CheckBox input {
+  margin-left: -4px;
+}
+
+.gwt-DateBox input {
+  width: 8em;
+}
+.dateBoxFormatError {
+  background: #ffcccc;
+}
+.dateBoxPopup {
+}
+
+.gwt-DatePicker {
+  border: 1px solid #A2BBDD;
+  cursor: default;
+}
+.gwt-DatePicker td,
+.datePickerMonthSelector td:focus {
+  outline: none
+}
+.datePickerDays {
+  width: 100%;
+  background: white;
+}
+.datePickerDay,
+.datePickerWeekdayLabel,
+.datePickerWeekendLabel {
+  font-size: 75%;
+  text-align: center;
+  padding: 4px;
+  outline: none;
+}
+.datePickerWeekdayLabel,
+.datePickerWeekendLabel {
+  background: #C3D9FF;
+  padding: 0px 4px 2px;
+  cursor: default;
+}
+.datePickerDay {
+  padding: 4px;
+  cursor: hand;
+  cursor: pointer;
+}
+.datePickerDayIsToday {
+  border: 1px solid black;
+  padding: 3px;
+}
+.datePickerDayIsWeekend {
+  background: #EEEEEE;
+}
+.datePickerDayIsFiller {
+  color: #888888;
+}
+.datePickerDayIsValue {
+  background: #aaccee;
+}
+.datePickerDayIsDisabled {
+  color: #AAAAAA;
+  font-style: italic;
+}
+.datePickerDayIsHighlighted {
+  background: #F0E68C;
+}
+.datePickerDayIsValueAndHighlighted {
+  background: #bbddd9;
+}
+.datePickerMonthSelector {
+  background: #C3D9FF;
+  width: 100%;
+}
+td.datePickerMonth {
+  text-align: center;
+  vertical-align: center;
+  white-space: nowrap;
+  font-size: 70%;
+  font-weight: bold;
+  color: blue;
+}
+.datePickerPreviousButton,
+.datePickerNextButton {
+  font-size: 120%;
+  line-height: 1em;
+  color: blue;
+  cursor: hand;
+  cursor: pointer;
+  padding: 0px 4px;
+}



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@labs.apache.org
For additional commands, e-mail: commits-help@labs.apache.org