/** * (C) Copyright 2013 Jabylon (http://www.jabylon.org) and others. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ package org.jabylon.rest.ui.util; import java.text.MessageFormat; import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Deque; import java.util.List; import java.util.Locale; import org.apache.wicket.request.Request; import org.apache.wicket.request.cycle.RequestCycle; import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.request.resource.ResourceReference; import org.apache.wicket.request.resource.UrlResourceReference; import org.eclipse.emf.common.util.URI; import org.jabylon.properties.PropertiesFactory; import org.jabylon.properties.PropertiesPackage; import org.jabylon.properties.Resolvable; public class WicketUtil { public static PageParameters buildPageParametersFor(Resolvable<?, ?> r) { PageParameters params = new PageParameters(); Deque<String> segments = new ArrayDeque<String>(); Resolvable<?, ?> part = r; while(part!=null) { String name = part.getName(); if(name!=null) segments.push(name); part = part.getParent(); } int count = 0; for (String string : segments) { params.set(count++, string); } return params; } public static PageParameters buildPageParametersFor(URI uri) { PageParameters params = new PageParameters(); List<String> segments = new ArrayList<String>(uri.segmentsList()); int count = 0; for (String string : segments) { params.set(count++, string); } return params; } /** * * @return the web context or "" if mounted as / */ public static String getContextPath() { String path = RequestCycle.get().getRequest().getFilterPath(); if(path==null || path.isEmpty()) return ""; return path; } public static ResourceReference getIconForLocale(Locale locale) { if(locale==null) return null; String iconName = ""; if(locale.getCountry()!=null && locale.getCountry().length()>0) { iconName = locale.getCountry().toLowerCase(); } else { iconName = derriveCountry(locale); } String url = "img/flags/gif/{0}.gif"; url = MessageFormat.format(url ,iconName); UrlResourceReference ref = new WebContextUrlResourceReference(url); return ref; } public static String derriveCountry(Locale locale) { String language = locale.getLanguage(); if("da".equals(language)) //denmark return "dk"; else if("ja".equals(language)) //japanese return "jp"; else if("uk".equals(language)) //ukraine return "ua"; else if("eu".equals(language)) //basque return null; //don't have this one yet else if("he".equals(language)) //hebrew return "il"; //isreal else if("iw".equals(language)) //old hebrew code, still used in java return "il"; //isreal else if("el".equals(language)) //greek return "gr"; else if("ko".equals(language)) //korean return "kr"; else if("te".equals(language)) //telegu return "in"; //india else if("ca".equals(language)) //catalan return "catalonia"; //official language in andorra (AD), but also other places. Use catalonia for now else if("zh".equals(language)) return "cn"; else if("en".equals(language)) //english return "gb"; //use GB as the flag else if("in".equals(language)) //indonesia see https://github.com/jutzig/jabylon/issues/205 return "id"; //use indonesian flag return language.toLowerCase(); //this works in many cases, but is wrong in some } public static Locale getUserLocale() { return getUserLocale(RequestCycle.get().getRequest()); } public static Locale getUserLocale(Request request) { return request.getLocale(); } public static Locale getLocaleFromString(String locale) { return (Locale) PropertiesFactory.eINSTANCE.createFromString(PropertiesPackage.Literals.LOCALE, locale); } }