-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
I did the changes and the output content now looks as below. <ns:suggestSearchPhrasesResponse> <ns:return type="org.wso2.mashup.coreservices.servicemetadatalister.Suggestion"> ~ <ns:authorFullName>Samples</ns:authorFullName> ~ <ns:authorUserName>samples</ns:authorUserName> ~ <ns:commentText/> ~ <ns:mashupName>TwitterMap</ns:mashupName> ~ <ns:mashupPath>/mashups/samples/TwitterMap</ns:mashupPath> </ns:return> </ns:suggestSearchPhrasesResponse> Tyrell Jonathan Marsh wrote: | Cool, works adequately as far as it goes, but I need a little more info - | the username of the mashup author, and the formal name. That way I can have | the dropdown present options like "version by System", and still compile | that down to mashup paths like "/mashups/system/version." | | So instead of <return>version</return> I need something like | <return><mashup>version</mashup><author>system</author><authorFull>System</a | uthorFull></return>. | | Enclosed are my works in progress for the client-side support. | |> -----Original Message----- |> From: [email protected] [mailto:[email protected]] |> On Behalf Of Tyrell Perera |> Sent: Monday, February 16, 2009 1:04 AM |> To: [email protected]; [email protected] |> Subject: Re: [Mashup-dev] Mashup-1111 |> | I added the following operation | | public String[] suggestSearchPhrases(String searchPrefix, int type) | | searchPrefix - The phrase being typed | type - The kind of query. 1-Mashups, 2-Comments | | The operation returns a String array of suggestions if found. | | | Tyrell | | Tyrell Perera wrote: | | I'll have a look.. | | | | Tyrell | | | | Jonathan Marsh wrote: | | | To add service type ahead I need an operation added to | | | ServiceMetaDataListerService.java to return a list of services | | | starting with the typeahead string. I need the Mashup name, along | | | with the author username and fullname. Would one of you like to | take | | | a crack? I've got most of the client code in place. | | | | | | Sent from my iPhone | | | | | | _______________________________________________ | | | Mashup-dev mailing list | | | [email protected] | | | https://wso2.org/cgi-bin/mailman/listinfo/mashup-dev | | | | | | | _______________________________________________ | Mashup-dev mailing list | [email protected] | https://wso2.org/cgi-bin/mailman/listinfo/mashup-dev | | |> _______________________________________________ Mashup-dev mailing list [email protected] https://wso2.org/cgi-bin/mailman/listinfo/mashup-dev |> - ------------------------------------------------------------------------ |> <%-- * Copyright 2006,2007 WSO2, Inc. http://www.wso2.org * * Licensed 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. --%> <%@ page errorPage="error.jsp" %> <%@ page import="com.sun.syndication.feed.synd.SyndContent" %> <%@ page import="com.sun.syndication.feed.synd.SyndContentImpl" %> <%@ page import="com.sun.syndication.feed.synd.SyndEntry" %> <%@ page import="com.sun.syndication.feed.synd.SyndEntryImpl" %> <%@ page import="com.sun.syndication.feed.synd.SyndFeed" %> <%@ page import="com.sun.syndication.feed.synd.SyndFeedImpl" %> <%@ page import="com.sun.syndication.io.SyndFeedOutput" %> <%@ page import="org.wso2.mashup.MashupConstants" %> <%@ page import="org.wso2.mashup.utils.QueryResult" %> <%@ page import="org.wso2.mashup.utils.QueryResults" %> <%@ page import="org.wso2.mashup.webapp.userprofile.User" %> <%@ page import="org.wso2.mashup.webapp.userprofile.UserQuery" %> <%@ page import="org.wso2.mashup.webapp.utils.QueryParamUtils" %> <%@ page import="org.wso2.mashup.webapp.utils.RegistryUtils" %> <%@ page import="org.wso2.registry.session.UserRegistry" %> <%@ page import="java.net.URL" %> <%@ page import="java.util.ArrayList" %> <%@ page import="java.util.Date" %> <%@ page import="java.util.Iterator" %> <%@ page import="java.util.List" %> <%@ page import="java.util.ResourceBundle" %> <%@ include file="validate_login.jsp" %> <% ResourceBundle bundle = ResourceBundle.getBundle("UI"); String currentUser = RegistryUtils.getCurrentUser(userRegistry); // Set bounceback location String queryString = request.getQueryString(); // todo: bounceback encoding seems to be ignored on this page. String thisPage = URLEncoder .encode("search.jsp" + (queryString == null ? "" : "?" + queryString), "UTF-8"); // List resourceDataList = new ArrayList(); String[] paths; List pathList = new ArrayList(); String query = request.getParameter("query"); String searchScope = request.getParameter("scope"); if (searchScope == null) { searchScope = ""; } String searchFor = request.getParameter("for"); if (searchFor == null || searchFor.equals("(mashups)") || searchFor.equals("(all mashups)") || searchFor.equals("(all comments)")) { searchFor = ""; } else { // strip "%", since they are a special character in our world searchFor = searchFor.replace("%", ""); } String onMashup = request.getParameter("onmashup"); if (onMashup == null) { onMashup = ""; } String paramTags = request.getParameter("tags"); String paramTitles = request.getParameter("titles"); String paramDescriptions = request.getParameter("descriptions"); boolean includeTags, includeTitles, includeDescriptions; if (query != null && query.equalsIgnoreCase("mashups") && !searchFor.equals("")) { // Restore form to match the query includeTags = paramTags != null && paramTags.equalsIgnoreCase("true"); includeTitles = paramTitles != null && paramTitles.equalsIgnoreCase("true"); includeDescriptions = paramDescriptions != null && paramDescriptions.equalsIgnoreCase("true"); } else { includeTags = true; includeTitles = true; includeDescriptions = true; } // Activity search parameter String paramPeriod = request.getParameter("period"); int period; try { period = Integer.parseInt(paramPeriod); } catch (NumberFormatException e) { period = 7; } String paramActivity = request.getParameter("activity"); String activity = paramActivity == null ? "" : paramActivity; // Controls param defines whether the search form is collapsed or not, allowing the search page // to be used to display arbitrary lists, not just for "search" results. E.g. a search initiated // by a URL instead of a search form probably won't want to show the search form prominently. String controls = request.getParameter("controls"); boolean showAdvanced = controls == null || controls.equalsIgnoreCase("true"); String origin = request.getParameter("origin"); boolean feelingLucky = origin != null && origin.equalsIgnoreCase("searchBox"); // Format for results - an HTML page, or an RSS feed. String format = request.getParameter("format"); boolean isFeed = (format != null) && (format.equalsIgnoreCase("rss") || format.equalsIgnoreCase("atom")); String queryTitle = ""; String queryPath = ""; String[] queryParams = new String[] { }; QueryResults results = null; int currentPage = 0; int numPages = 0; if (query != null) { if (query.equalsIgnoreCase("mashups") && searchScope.equals("") && searchFor.equals("")) { // Set up the predefined query for "All Mashups" queryTitle = "Everyone's mashups"; queryPath = MashupConstants.ALL_MASHUPS_QUERY_PATH; // queryParams defaults to new String[] { }; } else if (query.equalsIgnoreCase("mashups") && searchFor.equals("")) { // Set up the predefined query for "[My] Mashups" queryTitle = ((searchScope.equals(currentUser) && !isFeed) ? "My" : RegistryUtils.getFullName(request, searchScope) + "'s") + " mashups"; queryPath = MashupConstants.MY_MASHUPS_QUERY_PATH; queryParams = new String[] { searchScope }; } else if (query.equalsIgnoreCase("mashups")) { // todo: suboptimal query. Better would be to leave out clauses that don't apply String[] params; // Set up the customized query within all mashups as defined by the search phrase and locations if (searchScope.equals("")) { queryTitle = "Mashups "; queryPath = MashupConstants.CUSTOM_QUERY_PATH; params = new String[] { MashupConstants.IMPOSSIBLE_VALUE, MashupConstants.IMPOSSIBLE_VALUE, MashupConstants.IMPOSSIBLE_VALUE }; // prevent matches by default } else { queryTitle = ((searchScope.equals(currentUser) && !isFeed) ? "My" : RegistryUtils.getFullName(request, searchScope) + "'s") + " mashups "; queryPath = MashupConstants.MY_CUSTOM_QUERY_PATH; params = new String[] { MashupConstants.IMPOSSIBLE_VALUE, MashupConstants.IMPOSSIBLE_VALUE, MashupConstants.IMPOSSIBLE_VALUE, searchScope}; // prevent matches by default } if (includeTags) { queryTitle += "tagged '" + searchFor + "' "; params[2] = searchFor; if (includeTitles || includeDescriptions) { queryTitle += "or "; } } if (includeTitles || includeDescriptions) { queryTitle += "containing '" + searchFor + "' in "; } if (includeTitles) { queryTitle += "titles"; if (includeDescriptions) queryTitle += " or "; params[0] = MashupConstants.ALL_MASHUPS_PATH + "/%/%" + searchFor + '%'; } if (includeDescriptions) { queryTitle += "descriptions"; params[1] = '%' + searchFor + '%'; } queryParams = params; } else if (query.equalsIgnoreCase("toprated") && searchScope.equals("")) { // Set up the predefined query for "Highest Rated Mashups" queryPath = MashupConstants.TOP_MASHUPS_QUERY_PATH; queryTitle = "Highest rated mashups"; // queryParams defaults to new String[] { }; } else if (query.equalsIgnoreCase("toprated")) { // Set up the predefined query for "[My] Highest Rated Mashups" queryPath = MashupConstants.MY_TOP_MASHUPS_QUERY_PATH; queryTitle = ((searchScope.equals(currentUser) && !isFeed) ? "My" : RegistryUtils.getFullName(request, searchScope) + "'s") + " highest rated mashups"; queryParams = new String[] { searchScope }; } else if (query.equalsIgnoreCase("comments") && searchScope.equals("")) { // Set up the predefined query for All comments queryPath = MashupConstants.COMMENTS_QUERY_PATH; queryTitle = "Comments on all mashups"; queryParams = new String[] { "%" + searchFor + "%" }; } else if (query.equalsIgnoreCase("comments")) { // Set up the predefined query for [My] comments queryPath = MashupConstants.MY_COMMENTS_QUERY_PATH; queryTitle = ((searchScope.equals(currentUser) && !isFeed) ? "My" : RegistryUtils.getFullName(request, searchScope) + "'s") + " comments"; queryParams = new String[] { "%" + searchFor + "%", searchScope }; } else if (query.equalsIgnoreCase("activity")) { // Set up the query path to search activity log queryPath = MashupConstants.ACTIVITY_QUERY_PATH; if (searchScope.equals(currentUser) && !isFeed) { queryTitle = "My recent"; } else if (!searchScope.equals("")) { queryTitle = RegistryUtils.getFullName(request, searchScope) + "'s recent"; } else queryTitle = "Recent"; if (!activity.equalsIgnoreCase("all")) { queryTitle += " " + activity; } queryTitle += " activity"; if (onMashup != null && !onMashup.equals("")) { queryTitle += " on " + onMashup; } queryTitle += " (" + paramPeriod + " days)"; queryParams = new String[] { onMashup, activity, searchScope.equals("") ? null : searchScope, paramPeriod }; } else { // Error condition // todo: report error instead of just giving all results. // todo: show nice error message when an unknown username is specified. queryTitle = "Unknown query type - displaying Everyone's Mashups"; queryPath = MashupConstants.ALL_MASHUPS_QUERY_PATH; // queryParams defaults to new String[] { }; } // Implement pagination if the response is an HTML page, not for feeds. if (isFeed) { results = RegistryUtils.doQuery(userRegistry, queryTitle, queryPath, queryParams, MashupConstants.MAX_RESULTS_COUNT); } else { String requestedPage = request.getParameter("pageNumber") != null ? request.getParameter("pageNumber") : "1"; // Clear the cache for a fresh query, to prevent stale results. if (request.getParameter("pagenavi") == null) { RegistryUtils.clearQueryCache(request); } int pageLength = MashupConstants.DEFAULT_PAGE_SIZE; int pageNumber = Integer.parseInt(requestedPage); int firstElement = ((pageNumber - 1) * pageLength); results = RegistryUtils.doCachedQuery(userRegistry, queryTitle, queryPath, queryParams, MashupConstants.MAX_RESULTS_COUNT, request, firstElement, pageLength); int numElements = results.getResultCount(); numPages = numElements > 0 && numElements % pageLength == 0 ? numElements / pageLength : (numElements / pageLength) + 1; currentPage = pageNumber > 0 & pageNumber <= numPages ? pageNumber : 1; } if (feelingLucky && results.getResultCount() == 1) { Iterator iter = results.getResults().iterator(); if (results.getResultsType().equals("resource") && iter.hasNext()) { QueryResult result = (QueryResult) iter.next(); response.sendRedirect("mashup.jsp?author=" + result.getAuthor() + "&mashup=" + result.getName()); } } } if (format != null) { String defaultFeedType = "atom_0.3"; SyndFeed feed = new SyndFeedImpl(); List entries = new ArrayList(); Date today = new Date(); if (query == null) { queryTitle = "Everyone's Mashups"; queryPath = MashupConstants.ALL_MASHUPS_QUERY_PATH; queryParams = new String[] { }; results = RegistryUtils.doQuery(userRegistry, queryTitle, queryPath, queryParams, MashupConstants.MAX_RESULTS_COUNT); } //Setting the feed type according to the user request if (format.equalsIgnoreCase("rss")) { feed.setFeedType("rss_2.0"); } else if (format.equalsIgnoreCase("atom")) { feed.setFeedType("atom_0.3"); } else { feed.setFeedType(defaultFeedType); } feed.setTitle(queryTitle); feed.setDescription( "This feed is in response to the search parameters listed in the title."); //Creating the link of the feed. This is used for subscriptions String file = request.getRequestURI(); if (request.getQueryString() != null) { file += '?' + request.getQueryString(); } feed.setLink(request.getRequestURI()); if (results != null) { Iterator iter = results.getResults().iterator(); String entryTitle, entryAuthor, entryDescription, entryLink; Date entryDate; while (iter.hasNext()) { QueryResult result = (QueryResult) iter.next(); String mashupAuthor = RegistryUtils.getFullName(request, result.getPath().split("\\/")[2]); String mashupName = result.getName(); if (mashupName.indexOf(";comments") >= 0) { mashupName = mashupName.substring(0, mashupName.indexOf(";comments")); } if (results.getResultsType().equals("activity")) { String action = result.getAction(); entryDescription = ""; entryTitle = RegistryUtils.getFullName(request, result.getAuthor()) + " " + action + " " + (action.equals("commented") ? "on " : "") + (action.equals("deleted") && result.getName().indexOf(";comments") >=0 ? "a comment on " : "") + mashupAuthor + "'s \"" + mashupName + "\" service"; if (action.equals("rated")) { entryTitle += " " + result.getContentString() + " stars."; } else if (action.equals("tagged")) { entryTitle += " with " + result.getContentString(); } else if (action.equals("commented")) { entryDescription = "\"" + result.getContentString() + "\""; } } else if (results.getResultsType().equals("comment")) { entryTitle = RegistryUtils.getFullName(request, result.getAuthor()) + " commented on " + mashupAuthor + "'s " + mashupName + " service."; entryDescription = result.getContentString(); } else { entryTitle = mashupName + " by " + RegistryUtils.getFullName(request, result.getAuthor()); entryDescription = result.getDescription(); } URL mashupLink = new URL(request.getScheme(), request.getServerName(), request.getServerPort(), "/mashup.jsp?author=" + result.getAuthor() + "&mashup=" + mashupName); entryLink = mashupLink.toString(); entryDate = today; entryAuthor = bundle.getString("main.title"); SyndEntry entry = new SyndEntryImpl(); entry.setTitle(entryTitle); entry.setPublishedDate(entryDate); entry.setAuthor(entryAuthor); SyndContent description = new SyndContentImpl(); description.setType("text/html"); description.setValue(entryDescription); entry.setDescription(description); if (entryLink != null) entry.setLink(entryLink); entries.add(entry); } feed.setEntries(entries); //Writing the feed to response response.setContentType("application/xml; charset=UTF-8"); SyndFeedOutput output = new SyndFeedOutput(); output.output(feed, response.getWriter()); } //Stopping further processing return; } %> <%@ include file="header.jsp" %> <% if (showAdvanced) { %>style="display:none"<% } %>> show advanced search... <#> <% if (!showAdvanced) { %>style="display:none"<% } %>> |> ~ * Search ~ * this-<% } %>tab">Mashups <#> ~ * this-<% } %>tab-right"> ~ * this-<% } %>tab">Comments <#> ~ * this-<% } %>tab-right"> ~ * this-<% } %>tab">Recent Activity <#> ~ * this-<% } %>tab-right"> ~ * this-<% } %>tab">Special Queries <#> ~ * this-<% } %>tab-right"> |> <% if (query != null && !query.equalsIgnoreCase("mashups")) { %>style="display:none"<% } %> > <% if (searchScope.equals("") || searchScope.equals(currentUser)) { %>style="display:none" <% } else { %>value="<%=searchScope%>"<% } %> /> |> " onfocus="prepareInput(event)" onblur="restoreInput(event,'(all mashups)')" class="emptyfield" /> Include: <% if (includeTags) {%> checked="checked"<% } %> value="true" id="includetags" onChange="checkSubmit()"/> Tags <% if (includeTitles) {%> checked="checked"<% } %> value="true" id="includetitles" onChange="checkSubmit()"/> Titles <% if (includeDescriptions) {%> checked="checked"<% } %> value="true" id="includedescriptions" onChange="checkSubmit()"/> Descriptions |> <% if (query == null || !query.equalsIgnoreCase("comments")) { %>style="display:none"<% } %> > <% if (searchScope.equals("") || searchScope.equals(currentUser)) { %>style="display:none" <% } else { %>value="<%=searchScope%>"<% } %> /> |> " onfocus="prepareInput(event)" onblur="restoreInput(event,'(all comments)')" class="emptyfield"/> |> <% if (query == null || !query.equalsIgnoreCase("activity")) { %>style="display:none"<% } %> > <% if (searchScope.equals("") || searchScope.equals(currentUser)) { %>style="display:none" <% } else { %>value="<%=searchScope%>"<% } %> /> |> <% if (onMashup == null || onMashup.equals("")) { %>style="display:none" <% } else { %>value="<%=onMashup%>"<% } %> /> |> |> <% if (query == null || !query.equalsIgnoreCase("toprated")) { %>style="display:none"<% } %> > <% if (searchScope.equals("") || searchScope.equals(currentUser)) { %>style="display:none" <% } else { %>value="<%=searchScope%>"<% } %> /> |> |> ~ <% if (query != null) { %>start a new search... <search.jsp><% } %> <% if (query != null) { boolean isNewQuery = true; String pathString = QueryParamUtils.paramsFromQuery(queryPath, queryParams); User user = RegistryUtils.getUserProfile(currentUser, userRegistry); UserQuery[] queries = user.getQueries(); for (int i = 0; i < queries.length; i++) { UserQuery q = queries[i]; if (pathString.equalsIgnoreCase( QueryParamUtils.paramsFromQuery(q.getQueryPath(), q.getQueryParameters()))) { isNewQuery = false; break; } } if (RegistryUtils.isLoggedIn(userRegistry)) { %> <% if (!isNewQuery) {%>disabled<% } %>/> <% } else { %> Sign in <signin.jsp?bounceback=<%=thisPage%>> to add this query to your home page. <% } %> |> <% boolean commentsQuery = queryPath.equals(MashupConstants.COMMENTS_QUERY_PATH) || queryPath.equals(MashupConstants.MY_COMMENTS_QUERY_PATH) || queryPath.equals(MashupConstants.ACTIVITY_QUERY_PATH); %> <%= queryTitle%> [RSS feed] <search.jsp?<%=QueryParamUtils.paramsFromQuery(queryPath, queryParams)%>&format=rss> [Atom feed] <search.jsp?<%=QueryParamUtils.paramsFromQuery(queryPath, queryParams)%>&format=atom> <% if (results.getResultsType().equals("activity")) { %> Date Activity <% } else if (results.getResultsType().equals("comment")) { %> Date By On Comment <% } else { %> Name Author Description Rating <% } %> <% Iterator iter = results.getResults().iterator(); int nextId = 0; if (!iter.hasNext()) { %> No results found. <% } while (iter.hasNext()) { QueryResult result = (QueryResult) iter.next(); String id = "id" + nextId; String path = result.getPath(); if (results.getResultsType().equals("activity")) { String action = result.getAction(); %> <%=QueryParamUtils.friendlyDate(result.getDate())%> <% if (action.equals("deleted")) { %> <% } else if (action.equals("rated")) { %> <% } else if (action.equals("commented") || action.equals("tagged")) { %> <% } else { %> <% } %> <% if (result.getAuthor().equals(RegistryUtils.getCurrentUser(userRegistry))) { %> You <user.jsp?name=<%=result.getAuthor()%>> <% } else { %> <%=RegistryUtils .getFullName(request, result.getAuthor())%> <user.jsp?name=<%=result.getAuthor()%>> <% } %> <%= action %> <% if (action.equals("commented")) { %>on<% } %> <% if (action.equals("deleted")) { String activityTarget = result.getName(); if (activityTarget.indexOf(";comments") >= 0) { activityTarget = activityTarget.substring(0, activityTarget.indexOf(";comments")); %> a comment on <%=activityTarget%> <mashup.jsp?author=<%=result.getAuthor()%>&mashup=<%=activityTarget%>> <% } else { %> <%=result.getName()%> <% } } else { %> <%=result.getName()%> <mashup.jsp?author=<%=result.getAuthor()%>&mashup=<%=result.getName()%>> <% } if (action.equals("rated")) { %> <%=result.getContentString() %> stars <% } else if (action.equals("tagged")) { %> with <%=result .getContentString()%> <search.jsp?query=mashups&for=<%=result.getContentString()%>&tags=true> <% } else if (action.equals("commented")) { %> "<%=result.getContentString() %>" <% } %> <% } else if (results.getResultsType().equals("comment")) { String mashupName = result.getName(); if (mashupName.contains(";")) { mashupName = mashupName.substring(0, mashupName.indexOf(";")); } %> <%=QueryParamUtils.friendlyDate(result.getDate())%> <%=RegistryUtils.getFullName(request, result.getAuthor())%> <user.jsp?name=<%=result.getAuthor()%>> <%=mashupName%> <mashup.jsp?author=<%=result.getAuthor()%>&mashup=<%=result.getName()%>> <%=result.getContentString() %> <% } else { %> <%=result.getName()%> <mashup.jsp?author=<%=result.getAuthor()%>&mashup=<%=result.getName()%>> <%=RegistryUtils.getFullName(request, result.getAuthor())%> <user.jsp?name=<%=result.getAuthor()%>> "> <% if (RegistryUtils.isFaultyMashup(userRegistry, result.getPath())) { %> This mashup is marked faulty by the system. Please click on its name for further information. <% } else { %> <%= QueryParamUtils.trimVisibleChars(result.getDescription(), 270) %> <% } %> <%@ include file="rating.jsp" %> <% } nextId++; } %> <% if (query != null) {%> <% if (searchFor != null) { %> <% } if (onMashup != null) { %> <% } if (paramTags != null) { %> <% } if (paramTitles != null) { %> <% } if (paramDescriptions != null) { %> <% } if (paramPeriod != null) { %> <% } if (paramActivity != null) { %> <% } %> <% if (currentPage != 1) { %> << First <javascript:moveToPage(1)> | < Previous <javascript:moveToPage(<%= currentPage - 1 %>)> <% } if (currentPage < numPages) { %> Next > <javascript:moveToPage(<%= currentPage + 1 %>)> | Last >> <javascript:moveToPage(<%= numPages %>)> <% } %> Page of <%= numPages %> |> <% } %> |> |> <% if (RegistryUtils.isLoggedIn(userRegistry)) { %> <% if (!isNewQuery) {%>disabled<% } %>/> <% } else { %> Sign in <signin.jsp?bounceback=<%=thisPage%>> to add this query to your home page. <% } %> <% } %> |> <%@ include file="footer.jsp" %> - -- Tyrell Perera WSO2, Inc.; http://www.wso2.com/ "The Open Source SOA Company" http://tyrellperera.blogspot.com -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.6 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iD8DBQFJmtCmehFdPcgGx7oRAkUMAJ9c4ioACumhgG5/XH0CHqOmTOwCnACeOllC JYtcOrC6LQxCOS2g4d75NAI= =5eFl -----END PGP SIGNATURE----- _______________________________________________ Mashup-dev mailing list [email protected] https://wso2.org/cgi-bin/mailman/listinfo/mashup-dev
