diff --git a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/impl/EventRaceStatesJsonGetServlet.java b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/impl/EventRaceStatesJsonGetServlet.java index e769a35ed4e..1897a5ec74a 100644 --- a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/impl/EventRaceStatesJsonGetServlet.java +++ b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/impl/EventRaceStatesJsonGetServlet.java @@ -1,8 +1,6 @@ package com.sap.sailing.server.gateway.impl; import java.io.IOException; -import java.util.Calendar; -import java.util.Date; import java.util.UUID; import java.util.logging.Logger; @@ -10,28 +8,13 @@ import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.json.simple.JSONArray; import org.json.simple.JSONObject; -import com.sap.sailing.domain.abstractlog.race.RaceLog; -import com.sap.sailing.domain.abstractlog.race.RaceLogFlagEvent; -import com.sap.sailing.domain.abstractlog.race.analyzing.impl.AbortingFlagFinder; -import com.sap.sailing.domain.abstractlog.race.analyzing.impl.FinishedTimeFinder; -import com.sap.sailing.domain.abstractlog.race.analyzing.impl.LastFlagsFinder; -import com.sap.sailing.domain.abstractlog.race.analyzing.impl.StartTimeFinder; -import com.sap.sailing.domain.abstractlog.race.state.ReadonlyRaceState; -import com.sap.sailing.domain.abstractlog.race.state.impl.ReadonlyRaceStateImpl; -import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.gate.ReadonlyGateStartRacingProcedure; -import com.sap.sailing.domain.base.CourseArea; import com.sap.sailing.domain.base.Event; -import com.sap.sailing.domain.base.Fleet; -import com.sap.sailing.domain.base.RaceColumn; -import com.sap.sailing.domain.common.RaceIdentifier; -import com.sap.sailing.domain.common.racelog.RaceLogRaceStatus; import com.sap.sailing.domain.leaderboard.Leaderboard; -import com.sap.sailing.domain.racelog.RaceStateOfSameDayHelper; import com.sap.sailing.server.gateway.AbstractJsonHttpServlet; -import com.sap.sse.common.TimePoint; +import com.sap.sailing.server.gateway.jaxrs.api.EventRaceStatesSerializer; +import com.sap.sse.common.Util.Pair; public class EventRaceStatesJsonGetServlet extends AbstractJsonHttpServlet { private static final long serialVersionUID = -4820965681871902242L; @@ -39,33 +22,17 @@ public class EventRaceStatesJsonGetServlet extends AbstractJsonHttpServlet { private final static Logger logger = Logger.getLogger(EventRaceStatesJsonGetServlet.class.getName()); private static final String PARAM_NAME_EVENTID = "eventId"; - // private static final String PARAM_NAME_FILTER_BY_REGATTA = "filterByRegatta"; private static final String PARAM_NAME_FILTER_BY_LEADERBOARD = "filterByLeaderboard"; private static final String PARAM_NAME_FILTER_BY_COURSEAREA = "filterByCourseArea"; private static final String PARAM_NAME_FILTER_BY_DAYOFFSET = "filterByDayOffset"; - public static final String FIELD_EVENT_NAME = "name"; - public static final String FIELD_EVENT_ID = "id"; - public static final String FIELD_RACE_STATES = "raceStates"; - @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String eventIdParam = request.getParameter(PARAM_NAME_EVENTID); String filterByCourseAreaParam = request.getParameter(PARAM_NAME_FILTER_BY_COURSEAREA); String filterByLeaderboardParam = request.getParameter(PARAM_NAME_FILTER_BY_LEADERBOARD); String filterByDayOffsetParam = request.getParameter(PARAM_NAME_FILTER_BY_DAYOFFSET); - boolean filterByDayOffset = false; - Calendar dayToCheck = Calendar.getInstance(); - dayToCheck.setTime(new Date()); - if(filterByDayOffsetParam != null) { - try { - int dayOffset = Integer.parseInt(filterByDayOffsetParam); - filterByDayOffset = true; - dayToCheck.add(Calendar.DAY_OF_YEAR, dayOffset); - } catch (NumberFormatException e) { - // invalid integer - } - } + if (eventIdParam == null) { response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "You need to specify a event id using the "+ PARAM_NAME_EVENTID + " parameter"); @@ -74,98 +41,15 @@ public class EventRaceStatesJsonGetServlet extends AbstractJsonHttpServlet { if (event == null) { response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Event "+eventIdParam+" not found"); } else { - JSONObject result = new JSONObject(); - result.put(FIELD_EVENT_NAME, event.getName()); - result.put(FIELD_EVENT_ID, event.getId().toString()); - JSONArray raceStatesLogEntriesJson = new JSONArray(); - result.put(FIELD_RACE_STATES, raceStatesLogEntriesJson); - for (CourseArea courseArea : event.getVenue().getCourseAreas()) { - if(filterByCourseAreaParam == null || courseArea.getName().equals(filterByCourseAreaParam)) { - for (Leaderboard leaderboard : getService().getLeaderboards().values()) { - if (filterByLeaderboardParam == null || leaderboard.getName().equals(filterByLeaderboardParam)) { - if (leaderboard.getDefaultCourseArea() != null && leaderboard.getDefaultCourseArea().equals(courseArea)) { - String leaderboardName = leaderboard.getName(); - String leaderboardDisplayName = leaderboard.getDisplayName(); - for (RaceColumn raceColumn : leaderboard.getRaceColumns()) { - for (Fleet fleet : raceColumn.getFleets()) { - if(!filterByDayOffset || isRaceStateOfSameDay(raceColumn, fleet, dayToCheck)) { - JSONObject raceStateJson = createRaceStateJsonObject(raceColumn, fleet); - raceStateJson.put("courseAreaName", courseArea.getName()); - raceStateJson.put("leaderboardName", leaderboardName); - raceStateJson.put("leaderboardDisplayName", leaderboardDisplayName); - raceStatesLogEntriesJson.add(raceStateJson); - } - } - } - } - } - } - } - } + EventRaceStatesSerializer eventRaceStatesSerializer = new EventRaceStatesSerializer(filterByCourseAreaParam, + filterByLeaderboardParam, filterByDayOffsetParam); + JSONObject result = eventRaceStatesSerializer.serialize(new Pair>(event, getService().getLeaderboards().values())); setJsonResponseHeader(response); result.writeJSONString(response.getWriter()); } } } - private boolean isRaceStateOfSameDay(RaceColumn raceColumn, Fleet fleet, Calendar now) { - boolean result = false; - RaceLog raceLog = raceColumn.getRaceLog(fleet); - if (raceLog != null && !raceLog.isEmpty()) { - TimePoint startTime = new StartTimeFinder(raceLog).analyze(); - TimePoint finishedTime = new FinishedTimeFinder(raceLog).analyze(); - RaceLogFlagEvent abortingFlagEvent = new AbortingFlagFinder(raceLog).analyze(); - TimePoint abortingTime = abortingFlagEvent != null ? abortingFlagEvent.getLogicalTimePoint() : null; - - result = RaceStateOfSameDayHelper.isRaceStateOfSameDay(startTime, finishedTime, abortingTime, now); - } - return result; - } - - private JSONObject createRaceStateJsonObject(RaceColumn raceColumn, Fleet fleet) { - JSONObject result = new JSONObject(); - result.put("raceName", raceColumn.getName()); - result.put("fleetName", fleet.getName()); - RaceIdentifier raceIdentifier = raceColumn.getRaceIdentifier(fleet); - result.put("trackedRaceName", raceIdentifier != null ? raceIdentifier.getRaceName() : null); - result.put("trackedRaceId", raceIdentifier != null ? raceIdentifier.toString() : null); - RaceLog raceLog = raceColumn.getRaceLog(fleet); - if (raceLog != null && !raceLog.isEmpty()) { - ReadonlyRaceState state = ReadonlyRaceStateImpl.create(raceLog); - RaceLogRaceStatus status = state.getStatus(); - TimePoint startTime = state.getStartTime(); - TimePoint finishedTime = state.getFinishedTime(); - JSONObject raceLogStateJson = new JSONObject(); - result.put("raceState", raceLogStateJson); - raceLogStateJson.put("startTime", startTime != null ? startTime.toString() : null); - raceLogStateJson.put("endTime", finishedTime != null ? finishedTime.toString() : null); - raceLogStateJson.put("lastStatus", status.name()); - ReadonlyGateStartRacingProcedure procedure = state.getTypedReadonlyRacingProcedure(ReadonlyGateStartRacingProcedure.class); - if (procedure != null) { - raceLogStateJson.put("pathfinderId", procedure.getPathfinder()); - raceLogStateJson.put("gateLineOpeningTime", procedure.getGateLaunchStopTime()); - } - AbortingFlagFinder abortingFlagFinder = new AbortingFlagFinder(raceLog); - RaceLogFlagEvent abortingFlagEvent = abortingFlagFinder.analyze(); - LastFlagsFinder lastFlagFinder = new LastFlagsFinder(raceLog); - RaceLogFlagEvent lastFlagEvent = LastFlagsFinder.getMostRecent(lastFlagFinder.analyze()); - if (lastFlagEvent != null) { - setLastFlagField(raceLogStateJson, lastFlagEvent.getUpperFlag().name(), lastFlagEvent.getLowerFlag().name(), lastFlagEvent.isDisplayed()); - } else if (status.equals(RaceLogRaceStatus.UNSCHEDULED) && abortingFlagEvent != null) { - setLastFlagField(raceLogStateJson, abortingFlagEvent.getUpperFlag().name(), abortingFlagEvent.getLowerFlag().name(), abortingFlagEvent.isDisplayed()); - } else { - setLastFlagField(raceLogStateJson, null, null, null); - } - } - return result; - } - - private void setLastFlagField(JSONObject raceLogStateJson, String upperFlagName, String lowerFlagName, Boolean isDisplayed) { - raceLogStateJson.put("lastUpperFlag", upperFlagName); - raceLogStateJson.put("lastLowerFlag", lowerFlagName); - raceLogStateJson.put("displayed", isDisplayed); - } - /** * Tries to convert the given identifier to a UUID. When the identifier is not a UUID, null is returned. * @param identifierToConvert the identifier as a String diff --git a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/EventRaceStatesSerializer.java b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/EventRaceStatesSerializer.java new file mode 100644 index 00000000000..7b3e83dc649 --- /dev/null +++ b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/EventRaceStatesSerializer.java @@ -0,0 +1,87 @@ +package com.sap.sailing.server.gateway.jaxrs.api; + +import java.util.Calendar; +import java.util.Date; + +import org.json.simple.JSONArray; +import org.json.simple.JSONObject; + +import com.sap.sailing.domain.base.CourseArea; +import com.sap.sailing.domain.base.Event; +import com.sap.sailing.domain.base.Fleet; +import com.sap.sailing.domain.base.RaceColumn; +import com.sap.sailing.domain.leaderboard.Leaderboard; +import com.sap.sailing.server.gateway.serialization.JsonSerializer; +import com.sap.sse.common.Util.Pair; + +public class EventRaceStatesSerializer implements JsonSerializer>> { + public static final String FIELD_EVENT_NAME = "name"; + public static final String FIELD_EVENT_ID = "id"; + public static final String FIELD_RACE_STATES = "raceStates"; + + private String filterByCourseArea; + private String filterByLeaderboardName; + private Calendar filterDay; + + public EventRaceStatesSerializer() { + this.filterByCourseArea = null; + this.filterByLeaderboardName = null; + this.filterDay = null; + } + + public EventRaceStatesSerializer(String filterByCourseArea, String filterByLeaderboard, String filterByDayOffset) { + this.filterByCourseArea = filterByCourseArea; + this.filterByLeaderboardName = filterByLeaderboard; + + Integer dayOffset = null; + if(filterByDayOffset != null) { + try { + dayOffset = Integer.parseInt(filterByDayOffset); + filterDay = Calendar.getInstance(); + filterDay.setTime(new Date()); + filterDay.add(Calendar.DAY_OF_YEAR, dayOffset); + } catch (NumberFormatException e) { + // invalid integer + filterDay = null; + } + } + } + + @Override + public JSONObject serialize(Pair> eventAndLeaderboards) { + Event event = eventAndLeaderboards.getA(); + Iterable leaderboards = eventAndLeaderboards.getB(); + + JSONObject result = new JSONObject(); + result.put(FIELD_EVENT_NAME, event.getName()); + result.put(FIELD_EVENT_ID, event.getId().toString()); + JSONArray raceStatesLogEntriesJson = new JSONArray(); + result.put(FIELD_RACE_STATES, raceStatesLogEntriesJson); + RaceStateSerializer raceStateSerializer = new RaceStateSerializer(); + for (CourseArea courseArea : event.getVenue().getCourseAreas()) { + if(filterByCourseArea == null || courseArea.getName().equals(filterByCourseArea)) { + for (Leaderboard leaderboard : leaderboards) { + if (filterByLeaderboardName == null || leaderboard.getName().equals(filterByLeaderboardName)) { + if (leaderboard.getDefaultCourseArea() != null && leaderboard.getDefaultCourseArea().equals(courseArea)) { + String leaderboardName = leaderboard.getName(); + String leaderboardDisplayName = leaderboard.getDisplayName(); + for (RaceColumn raceColumn : leaderboard.getRaceColumns()) { + for (Fleet fleet : raceColumn.getFleets()) { + Pair raceColumnAndFleet = new Pair(raceColumn, fleet); + if(filterDay == null || raceStateSerializer.isRaceStateOfSameDay(raceColumnAndFleet, filterDay)) { + JSONObject raceStateJson = raceStateSerializer.serialize(raceColumnAndFleet); + raceStateJson.put("courseAreaName", courseArea.getName()); + raceStateJson.put("leaderboardName", leaderboardName); + raceStateJson.put("leaderboardDisplayName", leaderboardDisplayName); + raceStatesLogEntriesJson.add(raceStateJson); + } + } + } + } + } + } + } + } + return result; + } +} diff --git a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/EventsResource.java b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/EventsResource.java index ce7a2f336a9..6da6328ffc9 100644 --- a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/EventsResource.java +++ b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/EventsResource.java @@ -6,6 +6,7 @@ import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.Status; @@ -15,12 +16,14 @@ import org.json.simple.JSONObject; import com.sap.sailing.domain.base.Event; import com.sap.sailing.domain.base.EventBase; +import com.sap.sailing.domain.leaderboard.Leaderboard; import com.sap.sailing.server.gateway.jaxrs.AbstractSailingServerResource; import com.sap.sailing.server.gateway.serialization.JsonSerializer; import com.sap.sailing.server.gateway.serialization.impl.CourseAreaJsonSerializer; import com.sap.sailing.server.gateway.serialization.impl.EventBaseJsonSerializer; import com.sap.sailing.server.gateway.serialization.impl.LeaderboardGroupBaseJsonSerializer; import com.sap.sailing.server.gateway.serialization.impl.VenueJsonSerializer; +import com.sap.sse.common.Util.Pair; @Path("/v1/events") public class EventsResource extends AbstractSailingServerResource { @@ -71,8 +74,26 @@ public class EventsResource extends AbstractSailingServerResource { @GET @Produces("application/json;charset=UTF-8") @Path("{eventId}/racestates") - public Response getRaceStates(@PathParam("eventId") String eventId) { - return Response.noContent().build(); + public Response getRaceStates(@PathParam("eventId") String eventId, @QueryParam("filterByLeaderboard") String filterByLeaderboard, + @QueryParam("filterByCourseArea") String filterByCourseArea, @QueryParam("filterByDayOffset") String filterByDayOffset) { + Response response; + UUID eventUuid; + try { + eventUuid = UUID.fromString(eventId); + } catch (IllegalArgumentException e) { + return getBadEventErrorResponse(eventId); + } + Event event = getService().getEvent(eventUuid); + if (event == null) { + response = getBadEventErrorResponse(eventId); + } else { + EventRaceStatesSerializer eventRaceStatesSerializer = new EventRaceStatesSerializer(filterByCourseArea, + filterByLeaderboard, filterByDayOffset); + JSONObject raceStatesJson = eventRaceStatesSerializer.serialize(new Pair>(event, getService().getLeaderboards().values())); + String json = raceStatesJson.toJSONString(); + response = Response.ok(json, MediaType.APPLICATION_JSON).build(); + } + return response; } } \ No newline at end of file diff --git a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/RaceStateSerializer.java b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/RaceStateSerializer.java new file mode 100644 index 00000000000..ba4e7484024 --- /dev/null +++ b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/RaceStateSerializer.java @@ -0,0 +1,90 @@ +package com.sap.sailing.server.gateway.jaxrs.api; + +import java.util.Calendar; + +import org.json.simple.JSONObject; + +import com.sap.sailing.domain.abstractlog.race.RaceLog; +import com.sap.sailing.domain.abstractlog.race.RaceLogFlagEvent; +import com.sap.sailing.domain.abstractlog.race.analyzing.impl.AbortingFlagFinder; +import com.sap.sailing.domain.abstractlog.race.analyzing.impl.FinishedTimeFinder; +import com.sap.sailing.domain.abstractlog.race.analyzing.impl.LastFlagsFinder; +import com.sap.sailing.domain.abstractlog.race.analyzing.impl.StartTimeFinder; +import com.sap.sailing.domain.abstractlog.race.state.ReadonlyRaceState; +import com.sap.sailing.domain.abstractlog.race.state.impl.ReadonlyRaceStateImpl; +import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.gate.ReadonlyGateStartRacingProcedure; +import com.sap.sailing.domain.base.Fleet; +import com.sap.sailing.domain.base.RaceColumn; +import com.sap.sailing.domain.common.RaceIdentifier; +import com.sap.sailing.domain.common.racelog.RaceLogRaceStatus; +import com.sap.sailing.domain.racelog.RaceStateOfSameDayHelper; +import com.sap.sailing.server.gateway.serialization.JsonSerializer; +import com.sap.sse.common.TimePoint; +import com.sap.sse.common.Util.Pair; + +public class RaceStateSerializer implements JsonSerializer> { + @Override + public JSONObject serialize(Pair raceColumnAndFleet) { + RaceColumn raceColumn = raceColumnAndFleet.getA(); + Fleet fleet = raceColumnAndFleet.getB(); + + JSONObject result = new JSONObject(); + result.put("raceName", raceColumn.getName()); + result.put("fleetName", fleet.getName()); + RaceIdentifier raceIdentifier = raceColumn.getRaceIdentifier(fleet); + result.put("trackedRaceName", raceIdentifier != null ? raceIdentifier.getRaceName() : null); + result.put("trackedRaceId", raceIdentifier != null ? raceIdentifier.toString() : null); + RaceLog raceLog = raceColumn.getRaceLog(fleet); + if (raceLog != null && !raceLog.isEmpty()) { + ReadonlyRaceState state = ReadonlyRaceStateImpl.create(raceLog); + RaceLogRaceStatus status = state.getStatus(); + TimePoint startTime = state.getStartTime(); + TimePoint finishedTime = state.getFinishedTime(); + JSONObject raceLogStateJson = new JSONObject(); + result.put("raceState", raceLogStateJson); + raceLogStateJson.put("startTime", startTime != null ? startTime.toString() : null); + raceLogStateJson.put("endTime", finishedTime != null ? finishedTime.toString() : null); + raceLogStateJson.put("lastStatus", status.name()); + ReadonlyGateStartRacingProcedure procedure = state.getTypedReadonlyRacingProcedure(ReadonlyGateStartRacingProcedure.class); + if (procedure != null) { + raceLogStateJson.put("pathfinderId", procedure.getPathfinder()); + raceLogStateJson.put("gateLineOpeningTime", procedure.getGateLaunchStopTime()); + } + AbortingFlagFinder abortingFlagFinder = new AbortingFlagFinder(raceLog); + RaceLogFlagEvent abortingFlagEvent = abortingFlagFinder.analyze(); + LastFlagsFinder lastFlagFinder = new LastFlagsFinder(raceLog); + RaceLogFlagEvent lastFlagEvent = LastFlagsFinder.getMostRecent(lastFlagFinder.analyze()); + if (lastFlagEvent != null) { + setLastFlagField(raceLogStateJson, lastFlagEvent.getUpperFlag().name(), lastFlagEvent.getLowerFlag().name(), lastFlagEvent.isDisplayed()); + } else if (status.equals(RaceLogRaceStatus.UNSCHEDULED) && abortingFlagEvent != null) { + setLastFlagField(raceLogStateJson, abortingFlagEvent.getUpperFlag().name(), abortingFlagEvent.getLowerFlag().name(), abortingFlagEvent.isDisplayed()); + } else { + setLastFlagField(raceLogStateJson, null, null, null); + } + } + return result; + } + + private void setLastFlagField(JSONObject raceLogStateJson, String upperFlagName, String lowerFlagName, Boolean isDisplayed) { + raceLogStateJson.put("lastUpperFlag", upperFlagName); + raceLogStateJson.put("lastLowerFlag", lowerFlagName); + raceLogStateJson.put("displayed", isDisplayed); + } + + public boolean isRaceStateOfSameDay(Pair raceColumnAndFleet, Calendar dayToCheck) { + RaceColumn raceColumn = raceColumnAndFleet.getA(); + Fleet fleet = raceColumnAndFleet.getB(); + + boolean result = false; + RaceLog raceLog = raceColumn.getRaceLog(fleet); + if (raceLog != null && !raceLog.isEmpty()) { + TimePoint startTime = new StartTimeFinder(raceLog).analyze(); + TimePoint finishedTime = new FinishedTimeFinder(raceLog).analyze(); + RaceLogFlagEvent abortingFlagEvent = new AbortingFlagFinder(raceLog).analyze(); + TimePoint abortingTime = abortingFlagEvent != null ? abortingFlagEvent.getLogicalTimePoint() : null; + + result = RaceStateOfSameDayHelper.isRaceStateOfSameDay(startTime, finishedTime, abortingTime, dayToCheck); + } + return result; + } +} diff --git a/java/com.sap.sailing.server.gateway/webservices/api/v1/eventRaceStatesGetDoc.html b/java/com.sap.sailing.server.gateway/webservices/api/v1/eventRaceStatesGetDoc.html new file mode 100644 index 00000000000..c1ceefc855f --- /dev/null +++ b/java/com.sap.sailing.server.gateway/webservices/api/v1/eventRaceStatesGetDoc.html @@ -0,0 +1,50 @@ + + + + + + + + SAP Sailing Analytics Webservices API Version 1.0 Beta + + +

SAP Sailing Analytics Webservices API Version 1.0 Beta

+

URL: /api/v1/events/{eventId}/racestates

+ +Description: +

The service gets the race states of all races of an sailing event

+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Webservice Type:REST
Output format:Json
Mandatory parameters:None
Optional parameters: +
filterByLeaderboard (filters the race states by the name of the leaderboard)
+
filterByCourseArea (filters the race states by the name of the course area)
+
filterByDayOffset (filters the race states by a day offset for current day, e.g. 1 means yesterday)
+
Request method:GET
Example:http://www.sapsailing.com/sailingserver/api/v1/events/41de25fd-0f22-4200-bdac-5574e7d5225d/racestates
+
+Back to Web Service Overview + + diff --git a/java/com.sap.sailing.server.gateway/webservices/api/v1/index.html b/java/com.sap.sailing.server.gateway/webservices/api/v1/index.html index ec818730916..fd83b6ab453 100644 --- a/java/com.sap.sailing.server.gateway/webservices/api/v1/index.html +++ b/java/com.sap.sailing.server.gateway/webservices/api/v1/index.html @@ -40,6 +40,10 @@ name to make sure you get to the event you're interested in. /api/v1/events/{id} Gets the details of an event + + /api/v1/events/{id}/racestates + Gets the race states of all races of an event + /api/v1/regattas Gets all regattas diff --git a/java/com.sap.sailing.server/SailingServer (No Proxy).launch b/java/com.sap.sailing.server/SailingServer (No Proxy).launch index 8a9f6b5f5a2..21627fd6acd 100755 --- a/java/com.sap.sailing.server/SailingServer (No Proxy).launch +++ b/java/com.sap.sailing.server/SailingServer (No Proxy).launch @@ -34,5 +34,5 @@ - + diff --git a/java/com.sap.sailing.server/SailingServer (No Proxy, Cached MTB).launch b/java/com.sap.sailing.server/SailingServer (No Proxy, Cached MTB).launch index ded8c572ff2..68dd7191370 100755 --- a/java/com.sap.sailing.server/SailingServer (No Proxy, Cached MTB).launch +++ b/java/com.sap.sailing.server/SailingServer (No Proxy, Cached MTB).launch @@ -29,9 +29,9 @@ - + - + diff --git a/java/com.sap.sailing.server/SailingServer (No Proxy, Jetty on 8889).launch b/java/com.sap.sailing.server/SailingServer (No Proxy, Jetty on 8889).launch index 4a87c5dcac8..3ec0f77dfc2 100755 --- a/java/com.sap.sailing.server/SailingServer (No Proxy, Jetty on 8889).launch +++ b/java/com.sap.sailing.server/SailingServer (No Proxy, Jetty on 8889).launch @@ -27,6 +27,6 @@ - + diff --git a/java/com.sap.sailing.server/SailingServer (No Proxy, Jetty on 8889, Cached MTB).launch b/java/com.sap.sailing.server/SailingServer (No Proxy, Jetty on 8889, Cached MTB).launch index 3a7fa0de9c5..7dc838a1181 100755 --- a/java/com.sap.sailing.server/SailingServer (No Proxy, Jetty on 8889, Cached MTB).launch +++ b/java/com.sap.sailing.server/SailingServer (No Proxy, Jetty on 8889, Cached MTB).launch @@ -16,7 +16,7 @@ - + @@ -27,6 +27,6 @@ - + diff --git a/java/com.sap.sailing.server/SailingServer (No Proxy, Jetty on 8890).launch b/java/com.sap.sailing.server/SailingServer (No Proxy, Jetty on 8890).launch index 254ba26fee7..4e7742996a4 100755 --- a/java/com.sap.sailing.server/SailingServer (No Proxy, Jetty on 8890).launch +++ b/java/com.sap.sailing.server/SailingServer (No Proxy, Jetty on 8890).launch @@ -26,6 +26,6 @@ - + diff --git a/java/com.sap.sailing.server/SailingServer (No Proxy, Remote Debug SAP VM).launch b/java/com.sap.sailing.server/SailingServer (No Proxy, Remote Debug SAP VM).launch index 723697b6c4f..a0b813374ec 100755 --- a/java/com.sap.sailing.server/SailingServer (No Proxy, Remote Debug SAP VM).launch +++ b/java/com.sap.sailing.server/SailingServer (No Proxy, Remote Debug SAP VM).launch @@ -15,7 +15,7 @@ - + @@ -26,5 +26,5 @@ - + diff --git a/java/com.sap.sailing.server/SailingServer (Proxy).launch b/java/com.sap.sailing.server/SailingServer (Proxy).launch index 73c1d33df86..6d252d818a5 100755 --- a/java/com.sap.sailing.server/SailingServer (Proxy).launch +++ b/java/com.sap.sailing.server/SailingServer (Proxy).launch @@ -34,6 +34,6 @@ - + diff --git a/java/com.sap.sailing.server/SailingServer (Proxy, Jetty on 8889).launch b/java/com.sap.sailing.server/SailingServer (Proxy, Jetty on 8889).launch index 49611a87c36..6d2ff20591f 100755 --- a/java/com.sap.sailing.server/SailingServer (Proxy, Jetty on 8889).launch +++ b/java/com.sap.sailing.server/SailingServer (Proxy, Jetty on 8889).launch @@ -27,6 +27,6 @@ - + diff --git a/java/com.sap.sailing.server/SailingServer (Proxy, Remote Debug SAP VM).launch b/java/com.sap.sailing.server/SailingServer (Proxy, Remote Debug SAP VM).launch index 9e99a5d1946..90ea164e7fd 100755 --- a/java/com.sap.sailing.server/SailingServer (Proxy, Remote Debug SAP VM).launch +++ b/java/com.sap.sailing.server/SailingServer (Proxy, Remote Debug SAP VM).launch @@ -16,7 +16,7 @@ - + @@ -26,5 +26,5 @@ - + diff --git a/java/com.sap.sailing.server/SailingServer (Proxy, SwissTiming Live Simulation).launch b/java/com.sap.sailing.server/SailingServer (Proxy, SwissTiming Live Simulation).launch index 59df666c599..cfa760728db 100755 --- a/java/com.sap.sailing.server/SailingServer (Proxy, SwissTiming Live Simulation).launch +++ b/java/com.sap.sailing.server/SailingServer (Proxy, SwissTiming Live Simulation).launch @@ -26,5 +26,5 @@ - + diff --git a/java/com.sap.sailing.server/SailingServer (Proxy, winddbTest).launch b/java/com.sap.sailing.server/SailingServer (Proxy, winddbTest).launch index 1851792927f..0f9e209026a 100755 --- a/java/com.sap.sailing.server/SailingServer (Proxy, winddbTest).launch +++ b/java/com.sap.sailing.server/SailingServer (Proxy, winddbTest).launch @@ -28,6 +28,6 @@ - + diff --git a/java/com.sap.sse.gwt.theme/.classpath b/java/com.sap.sse.gwt.theme/.classpath new file mode 100644 index 00000000000..ffa9f4e615c --- /dev/null +++ b/java/com.sap.sse.gwt.theme/.classpath @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/java/com.sap.sse.gwt.theme/.gitignore b/java/com.sap.sse.gwt.theme/.gitignore new file mode 100644 index 00000000000..62f0b377a8a --- /dev/null +++ b/java/com.sap.sse.gwt.theme/.gitignore @@ -0,0 +1,6 @@ +/bin +/.gwt +/.generated +/gwt-unitCache +/extras +/com.sap.sse.gwt.theme.* diff --git a/java/com.sap.sse.gwt.theme/.project b/java/com.sap.sse.gwt.theme/.project new file mode 100644 index 00000000000..8e679e93a05 --- /dev/null +++ b/java/com.sap.sse.gwt.theme/.project @@ -0,0 +1,39 @@ + + + com.sap.sse.gwt.theme + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + com.google.gdt.eclipse.core.webAppProjectValidator + + + + + com.google.gwt.eclipse.core.gwtProjectValidator + + + + + + org.eclipse.pde.PluginNature + org.eclipse.jdt.core.javanature + com.google.gwt.eclipse.core.gwtNature + + diff --git a/java/com.sap.sse.gwt.theme/.settings/com.google.gwt.eclipse.core.prefs b/java/com.sap.sse.gwt.theme/.settings/com.google.gwt.eclipse.core.prefs new file mode 100644 index 00000000000..e992774d99b --- /dev/null +++ b/java/com.sap.sse.gwt.theme/.settings/com.google.gwt.eclipse.core.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +gwtCompileSettings=PGd3dC1jb21waWxlLXNldHRpbmdzPjxsb2ctbGV2ZWw+SU5GTzwvbG9nLWxldmVsPjxvdXRwdXQtc3R5bGU+T0JGVVNDQVRFRDwvb3V0cHV0LXN0eWxlPjxleHRyYS1hcmdzPjwhW0NEQVRBWy13YXIgLiAtbG9jYWxXb3JrZXJzIDMgLXN0cmljdCAtbG9nTGV2ZWwgSU5GT11dPjwvZXh0cmEtYXJncz48dm0tYXJncz48IVtDREFUQVstWG14NTEybV1dPjwvdm0tYXJncz48ZW50cnktcG9pbnQtbW9kdWxlPmNvbS5zYXAuc3NlLmd3dC50aGVtZS5TU0VUaGVtZTwvZW50cnktcG9pbnQtbW9kdWxlPjwvZ3d0LWNvbXBpbGUtc2V0dGluZ3M+ diff --git a/java/com.sap.sse.gwt.theme/META-INF/MANIFEST.MF b/java/com.sap.sse.gwt.theme/META-INF/MANIFEST.MF new file mode 100644 index 00000000000..ff236c0cf0d --- /dev/null +++ b/java/com.sap.sse.gwt.theme/META-INF/MANIFEST.MF @@ -0,0 +1,19 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: SSE Base Theme +Bundle-SymbolicName: com.sap.sse.gwt.theme +Bundle-Version: 1.0.0.qualifier +Bundle-Vendor: SAP +Bundle-RequiredExecutionEnvironment: JavaSE-1.7 +Bundle-ActivationPolicy: lazy +Bundle-ClassPath: WEB-INF/classes/ +Import-Package: org.osgi.framework;version="1.7.0", + javax.servlet;version="3.1.0", + javax.servlet.descriptor;version="3.1.0", + javax.servlet.http;version="3.1.0" +Require-Bundle: com.google.gwt.osgi;bundle-version="2.7.0", + com.sap.sailing.domain.common, + com.sap.sse.common, + com.sap.sse.gwt +Web-ContextPath: /theme +Export-Package: com.sap.sse.gwt.theme.client diff --git a/java/com.sap.sse.gwt.theme/SSETheme.css b/java/com.sap.sse.gwt.theme/SSETheme.css new file mode 100644 index 00000000000..9a49fb97ef1 --- /dev/null +++ b/java/com.sap.sse.gwt.theme/SSETheme.css @@ -0,0 +1,3 @@ +.mainPanel { + +} \ No newline at end of file diff --git a/java/com.sap.sse.gwt.theme/SSETheme.html b/java/com.sap.sse.gwt.theme/SSETheme.html new file mode 100644 index 00000000000..cb45c7aad46 --- /dev/null +++ b/java/com.sap.sse.gwt.theme/SSETheme.html @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + SAP Sports Engine Theme + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/java/com.sap.sse.gwt.theme/SSETheme_GWT sdm.launch b/java/com.sap.sse.gwt.theme/SSETheme_GWT sdm.launch new file mode 100644 index 00000000000..e61889df28b --- /dev/null +++ b/java/com.sap.sse.gwt.theme/SSETheme_GWT sdm.launch @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/java/com.sap.sse.gwt.theme/SSETheme_GWT.launch b/java/com.sap.sse.gwt.theme/SSETheme_GWT.launch new file mode 100644 index 00000000000..497ba323966 --- /dev/null +++ b/java/com.sap.sse.gwt.theme/SSETheme_GWT.launch @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/java/com.sap.sse.gwt.theme/WEB-INF/.gitignore b/java/com.sap.sse.gwt.theme/WEB-INF/.gitignore new file mode 100644 index 00000000000..b30e141e749 --- /dev/null +++ b/java/com.sap.sse.gwt.theme/WEB-INF/.gitignore @@ -0,0 +1,2 @@ +deploy +classes \ No newline at end of file diff --git a/java/com.sap.sse.gwt.theme/WEB-INF/web.xml b/java/com.sap.sse.gwt.theme/WEB-INF/web.xml new file mode 100644 index 00000000000..af72bde0bba --- /dev/null +++ b/java/com.sap.sse.gwt.theme/WEB-INF/web.xml @@ -0,0 +1,25 @@ + + + + + + default + org.eclipse.jetty.servlet.DefaultServlet + + + dirAllowed + false + + + useFileMappedBuffer + false + + + + + SSETheme.html + + diff --git a/java/com.sap.sse.gwt.theme/build.properties b/java/com.sap.sse.gwt.theme/build.properties new file mode 100644 index 00000000000..41365161d8b --- /dev/null +++ b/java/com.sap.sse.gwt.theme/build.properties @@ -0,0 +1,9 @@ +source.WEB-INF/classes/ = src/main/java +output.WEB-INF/classes/ = bin +bin.includes = META-INF/,\ + WEB-INF/classes/,\ + WEB-INF/web.xml,\ + com.sap.sse.gwt.theme.SSETheme/,\ + SSETheme.css,\ + SSETheme.html +output.. = WEB-INF/classes/ diff --git a/java/com.sap.sse.gwt.theme/pom.xml b/java/com.sap.sse.gwt.theme/pom.xml new file mode 100644 index 00000000000..eb3460c70c9 --- /dev/null +++ b/java/com.sap.sse.gwt.theme/pom.xml @@ -0,0 +1,105 @@ + + + 4.0.0 + + root + com.sap.sailing + 1.0.0-SNAPSHOT + + com.sap.sse.gwt.theme + eclipse-plugin + + + javax.validation + validation-api + 1.0.0.GA + + + javax.validation + validation-api + 1.0.0.GA + sources + + + com.sap.sailing + com.sap.sse.common + 1.0.0-SNAPSHOT + sources + + + com.sap.sailing + com.sap.sse.gwt + 1.0.0-SNAPSHOT + sources + + + + + + org.eclipse.tycho + tycho-source-plugin + ${tycho-version} + + + plugin-source + generate-sources + + plugin-source + + + + + + org.codehaus.mojo + gwt-maven-plugin + ${gwt.version} + + + + + -Dgwt.persistentunitcache=false + + + com.sap.sse.gwt.theme.SSETheme + + ${basedir}/.generated + 7 + ${basedir} + + + compile + + + + + + + + + + debug.no-gwt-compile + + + + org.codehaus.mojo + gwt-maven-plugin + ${gwt.version} + + + + + + + + help + + + + + + + + + diff --git a/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/SSETheme.gwt.xml b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/SSETheme.gwt.xml new file mode 100644 index 00000000000..8af42f07f54 --- /dev/null +++ b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/SSETheme.gwt.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/ThemeEntryPoint.java b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/ThemeEntryPoint.java new file mode 100644 index 00000000000..99665fc24e3 --- /dev/null +++ b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/ThemeEntryPoint.java @@ -0,0 +1,20 @@ +package com.sap.sse.gwt.theme.client; + +import com.google.gwt.core.client.EntryPoint; +import com.google.gwt.user.client.ui.RootLayoutPanel; +import com.sap.sse.gwt.theme.client.resources.ThemeResources; +import com.sap.sse.gwt.theme.client.showcase.MainPage; + +/** + * Entry point classes define onModuleLoad(). + */ +public class ThemeEntryPoint implements EntryPoint { + + @Override + public void onModuleLoad() { + ThemeResources.INSTANCE.mediaCss().ensureInjected(); + ThemeResources.INSTANCE.mainCss().ensureInjected(); + + RootLayoutPanel.get().add(new MainPage()); + } +} diff --git a/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/component/loadingindicator/LoadingIndicator.css b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/component/loadingindicator/LoadingIndicator.css new file mode 100644 index 00000000000..3251d4bb461 --- /dev/null +++ b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/component/loadingindicator/LoadingIndicator.css @@ -0,0 +1,2 @@ +.loadingIndicator { +} \ No newline at end of file diff --git a/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/component/loadingindicator/LoadingIndicator.java b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/component/loadingindicator/LoadingIndicator.java new file mode 100644 index 00000000000..f385113684f --- /dev/null +++ b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/component/loadingindicator/LoadingIndicator.java @@ -0,0 +1,19 @@ +package com.sap.sse.gwt.theme.client.component.loadingindicator; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.Widget; + +public class LoadingIndicator extends Composite { + private static LoadingIndicatorUiBinder uiBinder = GWT.create(LoadingIndicatorUiBinder.class); + + interface LoadingIndicatorUiBinder extends UiBinder { + } + + public LoadingIndicator() { + LoadingIndicatorResources.INSTANCE.css().ensureInjected(); + + initWidget(uiBinder.createAndBindUi(this)); + } +} diff --git a/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/component/loadingindicator/LoadingIndicator.ui.xml b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/component/loadingindicator/LoadingIndicator.ui.xml new file mode 100644 index 00000000000..506bb27b6de --- /dev/null +++ b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/component/loadingindicator/LoadingIndicator.ui.xml @@ -0,0 +1,9 @@ + + + + + + Loading... + + diff --git a/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/component/loadingindicator/LoadingIndicatorResources.java b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/component/loadingindicator/LoadingIndicatorResources.java new file mode 100644 index 00000000000..683743fdc7d --- /dev/null +++ b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/component/loadingindicator/LoadingIndicatorResources.java @@ -0,0 +1,16 @@ +package com.sap.sse.gwt.theme.client.component.loadingindicator; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.resources.client.ClientBundle; +import com.google.gwt.resources.client.CssResource; + +public interface LoadingIndicatorResources extends ClientBundle { + public static final LoadingIndicatorResources INSTANCE = GWT.create(LoadingIndicatorResources.class); + + @Source("LoadingIndicator.css") + LocalCss css(); + + public interface LocalCss extends CssResource { + String loadingIndicator(); + } +} diff --git a/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/component/sapfooter/SAPFooter.gss b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/component/sapfooter/SAPFooter.gss new file mode 100644 index 00000000000..05a39fd654a --- /dev/null +++ b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/component/sapfooter/SAPFooter.gss @@ -0,0 +1,55 @@ +/** + * Website footer styling + */ +.sitefooter { + font-size: 1rem; + background: #333; + border-top: 5px solid #fff; + color: #fff; + line-height: 5em; + width: 100%; + padding: 0 1.333333333333333em; +} +.sitefooter_copyright { + font-weight: 600; + margin-right: 2em; +} +@media (min-width: 45em) { + .sitefooter_copyright { + float: left; + } +} +.sitefooter_links { + text-align: left; + font-size: 1em; + font-weight: 600; + text-transform: uppercase; +} +.sitefooter_links_link { + display: block; + color: #fff; + text-decoration: none; + margin-right: 2em; +} +.sitefooter_links_link:last-child { + margin-right: 0; +} +@media (min-width: 45em) { + .sitefooter_links_link { + display: inline-block; + } +} +.sitefooter_language { + text-align: left; +} +@media (min-width: 45em) { + .sitefooter_language { + text-align: right; + } +} +.sitefooter_language_link { + color: #f0ab00; + display: inline-block; + cursor: pointer; + margin-left: 0.666666666666667em; +} diff --git a/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/component/sapfooter/SAPFooter.java b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/component/sapfooter/SAPFooter.java new file mode 100644 index 00000000000..88fc59bed9c --- /dev/null +++ b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/component/sapfooter/SAPFooter.java @@ -0,0 +1,68 @@ +package com.sap.sse.gwt.theme.client.component.sapfooter; + +import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.dom.client.DivElement; +import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.http.client.UrlBuilder; +import com.google.gwt.i18n.client.LocaleInfo; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.uibinder.client.UiHandler; +import com.google.gwt.user.client.Window; +import com.google.gwt.user.client.Window.Location; +import com.google.gwt.user.client.ui.Anchor; +import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.Widget; + +public class SAPFooter extends Composite { + private static SAPFooterPanelUiBinder uiBinder = GWT.create(SAPFooterPanelUiBinder.class); + + interface SAPFooterPanelUiBinder extends UiBinder { + } + + @UiField Anchor changeLanguageLink; + @UiField DivElement languageSelectionDiv; + + private final Map localeAndLanguages; + + public SAPFooter() { + localeAndLanguages = new HashMap(); + localeAndLanguages.put("default", "English"); + localeAndLanguages.put("de", "Deutsch"); + + SAPFooterResources.INSTANCE.css().ensureInjected(); + + initWidget(uiBinder.createAndBindUi(this)); + + updateUI(); + } + + @UiHandler("changeLanguageLink") + public void changeLanguage(ClickEvent e) { + String selectedLanguage = changeLanguageLink.getText(); + String selectedLocale = null; + for (Entry entry: localeAndLanguages.entrySet()) { + if (entry.getValue().equals(selectedLanguage)) { + selectedLocale = entry.getKey(); + } + } + if(selectedLocale != null) { + UrlBuilder builder = Location.createUrlBuilder().setParameter("locale", selectedLocale); + Window.Location.replace(builder.buildString()); + } + } + + private void updateUI() { + LocaleInfo currentLocale = LocaleInfo.getCurrentLocale(); + HashMap languagesToSelectFrom = new HashMap(localeAndLanguages); + languagesToSelectFrom.remove(currentLocale.getLocaleName()); + + if(languagesToSelectFrom.size() == 1) { + changeLanguageLink.setText(languagesToSelectFrom.values().iterator().next()); + } + } +} diff --git a/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/component/sapfooter/SAPFooter.ui.xml b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/component/sapfooter/SAPFooter.ui.xml new file mode 100644 index 00000000000..e91510e8856 --- /dev/null +++ b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/component/sapfooter/SAPFooter.ui.xml @@ -0,0 +1,33 @@ + + + + + + + + + + \ No newline at end of file diff --git a/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/component/sapfooter/SAPFooterResources.java b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/component/sapfooter/SAPFooterResources.java new file mode 100644 index 00000000000..0009fba40a4 --- /dev/null +++ b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/component/sapfooter/SAPFooterResources.java @@ -0,0 +1,21 @@ +package com.sap.sse.gwt.theme.client.component.sapfooter; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.resources.client.ClientBundle; +import com.google.gwt.resources.client.CssResource; + +public interface SAPFooterResources extends ClientBundle { + public static final SAPFooterResources INSTANCE = GWT.create(SAPFooterResources.class); + + @Source("com/sap/sse/gwt/theme/client/component/sapfooter/SAPFooter.gss") + LocalCss css(); + + public interface LocalCss extends CssResource { + String sitefooter(); + String sitefooter_copyright(); + String sitefooter_links(); + String sitefooter_links_link(); + String sitefooter_language(); + String sitefooter_language_link(); + } +} diff --git a/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/component/sapheader/SAPHeader.css b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/component/sapheader/SAPHeader.css new file mode 100644 index 00000000000..9de247011bb --- /dev/null +++ b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/component/sapheader/SAPHeader.css @@ -0,0 +1,44 @@ +.siteheader { + font-size: 15px; + font-size: 1rem; + background: #333; + border-bottom: 5px solid #f0ab00; + height: 70px; + line-height: 4em; + width: 100%; + overflow: hidden; + text-align:center; +} + +.siteheaderLeft { + float:left; + width: 25%; + text-align: left; +} + +.siteheaderCentered { + width: 50%; + display: inline-block; + margin:0 auto; +} + +.siteheaderRight { + float:right; + width: 25%; + text-align: right; +} + +.logo { + margin: 0.8em 10px; + float: left; +} +.logotitle { + display: inline; + color: #f6f9fc; + font-weight: bold; +} +.pagetitle { + color: #ffffff; + font-size: 1.5rem; + font-weight: bold; +} \ No newline at end of file diff --git a/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/component/sapheader/SAPHeader.java b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/component/sapheader/SAPHeader.java new file mode 100644 index 00000000000..83e30aaa36f --- /dev/null +++ b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/component/sapheader/SAPHeader.java @@ -0,0 +1,51 @@ +package com.sap.sse.gwt.theme.client.component.sapheader; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.core.client.Scheduler; +import com.google.gwt.core.client.Scheduler.RepeatingCommand; +import com.google.gwt.dom.client.DivElement; +import com.google.gwt.dom.client.ParagraphElement; +import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.uibinder.client.UiHandler; +import com.google.gwt.user.client.ui.Button; +import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.Widget; +import com.sap.sse.gwt.theme.client.util.FullscreenUtil; + +public class SAPHeader extends Composite { + private static SAPHeaderUiBinder uiBinder = GWT.create(SAPHeaderUiBinder.class); + + interface SAPHeaderUiBinder extends UiBinder { + } + + @UiField ParagraphElement applicationNameUi; + @UiField DivElement pageTitleUi; + @UiField Button startFullScreenButton; + + public SAPHeader(String applicationName, String pageTitle, boolean startInAutoScreenMode) { + SAPHeaderResources.INSTANCE.css().ensureInjected(); + + initWidget(uiBinder.createAndBindUi(this)); + + applicationNameUi.setInnerText(applicationName != null ? applicationName : " "); + pageTitleUi.setInnerText(pageTitle); + startFullScreenButton.setVisible(startInAutoScreenMode); + + // the 'fullscreen' button should disappear after some seconds (10) + if(startInAutoScreenMode) { + Scheduler.get().scheduleFixedPeriod(new RepeatingCommand() { + public boolean execute () { + startFullScreenButton.setVisible(false); + return false; + } + }, 10000); + } + } + + @UiHandler("startFullScreenButton") + void startFullScreenClicked(ClickEvent e) { + FullscreenUtil.requestFullscreen(); + } +} diff --git a/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/component/sapheader/SAPHeader.ui.xml b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/component/sapheader/SAPHeader.ui.xml new file mode 100644 index 00000000000..1138ddaf708 --- /dev/null +++ b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/component/sapheader/SAPHeader.ui.xml @@ -0,0 +1,21 @@ + + + + + +
+
+ +

+
+
+
+
+
+ +   +
+
+
+
diff --git a/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/component/sapheader/SAPHeaderResources.java b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/component/sapheader/SAPHeaderResources.java new file mode 100644 index 00000000000..cea0a1754d1 --- /dev/null +++ b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/component/sapheader/SAPHeaderResources.java @@ -0,0 +1,26 @@ +package com.sap.sse.gwt.theme.client.component.sapheader; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.resources.client.ClientBundle; +import com.google.gwt.resources.client.CssResource; +import com.google.gwt.resources.client.ImageResource; + +public interface SAPHeaderResources extends ClientBundle { + public static final SAPHeaderResources INSTANCE = GWT.create(SAPHeaderResources.class); + + @Source("SAPHeader.css") + LocalCss css(); + + public interface LocalCss extends CssResource { + String siteheader(); + String siteheaderLeft(); + String siteheaderCentered(); + String siteheaderRight(); + String logo(); + String logotitle(); + String pagetitle(); + } + + @Source("logo-small@2x.png") + ImageResource logo(); +} diff --git a/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/component/sapheader/logo-small@2x.png b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/component/sapheader/logo-small@2x.png new file mode 100644 index 00000000000..e5d2daf91f3 Binary files /dev/null and b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/component/sapheader/logo-small@2x.png differ diff --git a/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/resources/ThemeResources.java b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/resources/ThemeResources.java new file mode 100644 index 00000000000..d6026a3ab87 --- /dev/null +++ b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/resources/ThemeResources.java @@ -0,0 +1,140 @@ +package com.sap.sse.gwt.theme.client.resources; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.resources.client.ClientBundle; +import com.google.gwt.resources.client.CssResource; + +public interface ThemeResources extends ClientBundle { + public static final ThemeResources INSTANCE = GWT.create(ThemeResources.class); + + @Source("main.gss") + MainCss mainCss(); + + @Source("media.gss") + MediaCss mediaCss(); + + public interface MainCss extends CssResource{ + String wrapper(); + String navbar(); + String navbar_button(); + String navbar_buttonhidden(); + String navbar_buttonactive(); + String button(); + String buttonsmall(); + String buttonstrong(); + String buttoninactive(); + String buttonprimary(); + String buttonred(); + String buttonrefresh(); + String buttonarrowdown(); + String buttonsearch(); + String buttonarrowrightwhite(); + String label(); + String labellarge(); + String morelink(); + String dummy(); + String mainsection(); + String mainsection_header(); + String mainsection_header_title(); + String mainsection_navigation(); + String lightbox(); + String lightbox_overlay(); + String lightbox_content(); + String lightbox_close(); + String stickyheader(); + String slideto(); + String slidetonav(); + String slidetoactive(); + } + + public interface MediaCss extends CssResource{ + String grid(); + String stackenblochen(); + String column(); + String columns(); + String small1(); + String small2(); + String small3(); + String small4(); + String small5(); + String small6(); + String small7(); + String small8(); + String small9(); + String small10(); + String small11(); + String small12(); + String smalloffset0(); + String smalloffset1(); + String smalloffset2(); + String smalloffset3(); + String smalloffset4(); + String smalloffset5(); + String smalloffset6(); + String smalloffset7(); + String smalloffset8(); + String smalloffset9(); + String smalloffset10(); + String smalloffset11(); + String showonsmall(); + String hideonsmall(); + String showonmedium(); + String hideonmedium(); + String showonlarge(); + String hideonlarge(); + String smallcentered(); + String smalluncentered(); + String medium1(); + String medium2(); + String medium3(); + String medium4(); + String medium5(); + String medium6(); + String medium7(); + String medium8(); + String medium9(); + String medium10(); + String medium11(); + String medium12(); + String mediumoffset0(); + String mediumoffset1(); + String mediumoffset2(); + String mediumoffset3(); + String mediumoffset4(); + String mediumoffset5(); + String mediumoffset6(); + String mediumoffset7(); + String mediumoffset8(); + String mediumoffset9(); + String mediumoffset10(); + String mediumoffset11(); + String mediumcentered(); + String mediumuncentered(); + String large1(); + String large2(); + String large3(); + String large4(); + String large5(); + String large6(); + String large7(); + String large8(); + String large9(); + String large10(); + String large11(); + String large12(); + String largeoffset0(); + String largeoffset1(); + String largeoffset2(); + String largeoffset3(); + String largeoffset4(); + String largeoffset5(); + String largeoffset6(); + String largeoffset7(); + String largeoffset8(); + String largeoffset9(); + String largeoffset10(); + String largeoffset11(); + String largecentered(); + String largeuncentered(); + } +} \ No newline at end of file diff --git a/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/resources/i18n/TextMessages.java b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/resources/i18n/TextMessages.java new file mode 100644 index 00000000000..32cf93c7b04 --- /dev/null +++ b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/resources/i18n/TextMessages.java @@ -0,0 +1,17 @@ +package com.sap.sse.gwt.theme.client.resources.i18n; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.i18n.client.Messages; + +public interface TextMessages extends Messages { + public static final TextMessages INSTANCE = GWT.create(TextMessages.class); + + String chooseALanguage(); + + String footerCopyright(); + String footerLanguage(); + String footerLegal(); + String footerPrivacy(); + String footerFeedback(); + +} diff --git a/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/resources/i18n/TextMessages.properties b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/resources/i18n/TextMessages.properties new file mode 100644 index 00000000000..b5aa42979c2 --- /dev/null +++ b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/resources/i18n/TextMessages.properties @@ -0,0 +1,6 @@ +chooseALanguage = Choose a language +footerCopyright = \u00A9 2014 SAP Sailing Analytics +footerFeedback = Feedback +footerLanguage = SAP Sailing offered in +footerLegal = Legal Disclosure +footerPrivacy = Privacy diff --git a/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/resources/i18n/TextMessages_de.properties b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/resources/i18n/TextMessages_de.properties new file mode 100644 index 00000000000..6b3cbc592e8 --- /dev/null +++ b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/resources/i18n/TextMessages_de.properties @@ -0,0 +1,7 @@ +chooseALanguage = W\u00E4hle eine Sprache +footerCopyright = \u00A9 2014 SAP Sailing Analytics +footerFeedback = Feedback +footerLanguage = SAP Sailing in +footerLegal = Impressum +footerPrivacy = Datenschutz + diff --git a/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/resources/main.gss b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/resources/main.gss new file mode 100644 index 00000000000..ea60fb681f6 --- /dev/null +++ b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/resources/main.gss @@ -0,0 +1,417 @@ +/** + * The main styling styles + */ +*, +*:before, +*:after { + -moz-box-sizing: border-box; + box-sizing: border-box; +} +html, +body { + height: 100%; + font-family: 'Open Sans', sans-serif; + font-size: 93.75%; + line-height: 1.333; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + -ms-content-zooming: none; +} +figure { + margin: 0; +} +a { + text-decoration: none; + color: #008fcc; +} +a:hover, +a:focus { + text-decoration: underline; +} +a img { + vertical-align: bottom; +} +hr { + font-size: 1rem; + margin: 0; + height: 1px; + border: none; + border-top: 1px solid #eee; +} +h1 { + font-size: 2.133333333333333em; +} +h2 { + font-size: 1.466666666666667em; + font-weight: bold; + color: #008fcc; + margin-top: 0.7em; + margin-bottom: 0.7em; +} +h3 { + font-size: 1.2em; + font-weight: bold; + margin: 0 0 0.5em; +} +h4 { + font-size: 1em; + font-weight: bold; + color: #008fcc; +} +h5 { + font-size: 0.866666666666667em; + font-weight: 600; + color: #008fcc; +} +figure img { + display: block; +} +figcaption { + margin-top: 1.333333333333333em; +} +.wrapper { + position: relative; + min-height: 100%; + margin-bottom: -5em; + padding-bottom: 8em; +} +.wrapper > * { + padding-left: 1.333333333333333em; + padding-right: 1.333333333333333em; +} +.navbar { + font-size: 1rem; +} +.navbar_button { + font-size: 1.2em; + display: inline-block; + font-weight: 600; + color: #666; + border: 1px solid #dedede; + padding: 0.833333333333333em 0.944444444444444em; + background-color: #eee; + -webkit-transition: background-color 0.2s, border-color 0.2s; + -moz-transition: background-color 0.2s, border-color 0.2s; + transition: background-color 0.2s, border-color 0.2s; + text-decoration: none; + margin-right: 0.833333333333333em; +} +.navbar_buttonhidden { + display: block; +} +.navbar_button:hover, +.navbar_button:focus { + background-color: #dedede; + outline: none; + text-decoration: none; +} +.navbar_buttonactive { + color: #333; + background-color: #fff; + border-bottom: 1px solid #fff; +} +.navbar_buttonactive:hover, +.navbar_buttonactive:focus { + background-color: #dedede; + border-bottom: 1px solid #dedede; +} +.button { + font-size: 1rem; + display: inline-block; + font-weight: 600; + color: #fff; + border: none; + padding: 0.666666666666667em 2em; + border-radius: 0.2em; + background-color: #f0ab00; + -webkit-transition: background-color 0.2s; + -moz-transition: background-color 0.2s; + transition: background-color 0.2s; + text-decoration: none; +} +.button:hover, +.button:focus { + background-color: #d89a00; + outline: none; + text-decoration: none; +} +.buttonsmall { + visibility: inherit; +} +.buttonstrong { + font-size: 0.933333333333333rem; + font-weight: 700; + text-transform: uppercase; + padding: 0.714285714285714em 1.071428571428571em; +} +.buttoninactive { + background-color: #eee; +} +.buttoninactive:hover, +.buttoninactive:focus { + background-color: #eee; +} +.buttonprimary { + background-color: #008fcc; +} +.buttonprimary:hover, +.buttonprimary:focus { + background-color: #0081b8; +} +.buttonred { + background-color: #e94a1b; +} +.buttonred:hover, +.buttonred:focus { + background-color: #d54115; +} +.buttonrefresh { + background-image: url("data:image/png;base64,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"); +} +.buttonrefresh, +.buttonarrowdown { + background-repeat: no-repeat; + background-position: left top; + background-size: cover; + width: 2.333333333333333em; + height: 0; + padding: 2.333333333333333em 0 0 0; + border: 0; + overflow: hidden; +} +.buttonsearch { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNS4xIE1hY2ludG9zaCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo2NTg0MEE1MTVFN0UxMUU0QkNGMTk0Q0UzOUEwNUNFMyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo2NTg0MEE1MjVFN0UxMUU0QkNGMTk0Q0UzOUEwNUNFMyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjY1ODQwQTRGNUU3RTExRTRCQ0YxOTRDRTM5QTA1Q0UzIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjY1ODQwQTUwNUU3RTExRTRCQ0YxOTRDRTM5QTA1Q0UzIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+tERf2gAAArFJREFUeNrMmE1kXFEUx28SwjAMjxCGIQwhzCoMQysVugqlhJBVyCqLbELpqtmEUFJddZFNFhVSpd20uqgw1VIhixgSIqREYiKRSExkhNTruZzhOO5999737m3m8DdzZt6773fP/Trn9cRxLBysD/QUNAaKQEP4eQI6xc/voN/Cl0lAC1VBG6Cr2M6aoHegkmX7WpkuKIPW4/R2B1oBRSEAJ0G3BoAz0DaoZbjuGEfBG+CS5kG7oFegiua+MYxYU3Gv7OyUD0AV3CFo2qHhHGhBM2efZQGcUjT4ER+YZg7JRbLF2msljEAiYFkx515nXYXYuS+s3QNQvyvghiJywpPyoAZr/4ULYFXRw5xHQKkh3HY6dmGz/fTifv2S7d+LoLbwa39Ab4gvT6BZm5MkYj3b9Rw5qojN84ZNBB+B+gnzexHOLvGs7lgFVEy6oQNI7asIax+YP2oCLBP/BrQXGHCH+RUT4ADxZcr0NzDgEfMLJsA88dsivN0wP2cCvCZ+/j8ARsw/NwGeEr+IWXNIK7kC7hNfbje1wIA1xQaeCPiL/TYRGHCSzfkfppMkx/K2Q9tMI2X6dU+e9dPmJGmzzVNWanOBorfE5viqbVWnyjSKnqNXY9E7thkp6qywlGvLY8pVVNQpc64Ja4S9ovbJA2QJMyRqm2lrkqoi7W9kKMBrmgpvPEtVN60pGZdBBYeorRnePAxnqYufa4rxFg677MQoSdlL6MtS8xtbDJkgk/6s4J7ow+qgCcVwGyFtC/CLlGBNtlpHXCFtJ3sBQesWUPe4Smc0+5wTZI/j+0GBCa488Acx+xkk7waP8Gw15ZUjoE28lybLT1jyIkTACs4kq0g+JKAV5EMDGiHTzMEQNgyqK+bk424B1EF+7hXdY/u4immNJLopgh2TLxLe4vf5fwIMADtbDGrkqxb2AAAAAElFTkSuQmCC"); + background-color: transparent; + background-size: contain; + background-position: center center; + background-repeat: no-repeat; + width: 1.333333333333333em; + height: 1.333333333333333em; + padding: 0; +} +.buttonsearch:hover, +.buttonsearch:focus { + background-color: transparent; + outline: none; + text-decoration: none; +} +.buttonarrowdown { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAALFJREFUeNrs1TEOgjAUxnFx5iDscgPvwXkYuYdXwBPgAYwrsxPGIAPPvKQkxLQO5UE0+X9J06Ff0186tImI7H45CUCAAAECBAgQIMA1s1+y+dkUpUXna/QGY0Z/q0QztCcJddyauG7UOdHA8XWXKT7khNO47rbArj5kIeQnTrubA0NIS9xioA9piTMB+pBWODPgHGmJ02H6UD/OeaZzerxc+eoAAgQIECBAgAD/AvgWYACm/8hEADYaXwAAAABJRU5ErkJggg=="); + width: 2.666666666666667em; + padding: 2.733333333333333em 0 0 0; +} +.buttonarrowrightwhite:after { + content: ''; + display: inline-block; + margin-left: 0.666666666666667em; + width: 0.466666666666667em; + height: 0.8em; + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAAMCAYAAACulacQAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFtJREFUeNpi+P///wEgPgzEokDMgIxBxMn/EHAVXQGIkIBKYCiAqUJXIIEsiVUBA5ojRJEUnGFiwAR/ofQvXLpQjMXpILxeOY8rEEAOegfER4DYAYhfI7sMIMAAiXvwy2upI1UAAAAASUVORK5CYII="); + background-size: contain; + background-repeat: no-repeat; +} +.label { + display: inline-block; + font-size: 0.8rem; + font-weight: 600; + color: #fff; + padding: 0.066666666666667em 0.666666666666667em; + position: relative; + margin-left: 0.833333333333333em; + height: 1.666666666666667em; + line-height: 1.666666666666667em; +} +.label:before { + content: ''; + position: absolute; + top: 0; + left: -0.833333333333333em; + width: 0; + height: 0; + border-top: 0.833333333333333em solid transparent; + border-bottom: 0.833333333333333em solid transparent; + border-right: 0.833333333333333em solid transparent; +} +.labellarge { + height: 2em; + line-height: 1.75em; + margin-left: 1em; +} +.labellarge:before { + left: -1em; + border-top-width: 1em; + border-bottom-width: 1em; + border-right-width: 1em; +} +.label[datalabeltype='live'] { + background-color: #e94a1b; + vertical-align: middle; + margin-top: -0.416666666666667em; +} +.label[datalabeltype='live']:before { + border-right-color: #e94a1b; +} +.label[datalabeltype='finished'] { + background-color: #8ab54e; + vertical-align: middle; + margin-top: -0.416666666666667em; +} +.label[datalabeltype='finished']:before { + border-right-color: #8ab54e; +} +.label[datalabeltype='progress'] { + background-color: #f0ab00; + vertical-align: middle; + margin-top: -0.416666666666667em; +} +.label[datalabeltype='progress']:before { + border-right-color: #f0ab00; +} +.label[datalabeltype='upcoming'] { + color: #333; + background-color: #eee; + vertical-align: middle; + margin-top: -0.416666666666667em; +} +.label[datalabeltype='upcoming']:before { + border-right-color: #eee; +} +.label[datalabeltype='new'], +.label[datalabeltype='updated'] { + background-color: #f0ab00; + text-transform: uppercase; + vertical-align: middle; +} +.label[datalabeltype='new']:before, +.label[datalabeltype='updated']:before { + border-right-color: #f0ab00; +} +.label[datalabeltype='ess'] { + background-color: #a71724; +} +.label[datalabeltype='ess']:before { + border-right-color: #a71724; +} +.label[datalabeltype='worldcup'] { + background-color: #c79242; +} +.label[datalabeltype='worldcup']:before { + border-right-color: #c79242; +} +.label[datalabeltype='bundesliga'] { + background-color: #005fa7; +} +.label[datalabeltype='bundesliga']:before { + border-right-color: #005fa7; +} +.morelink { + color: #008fcc; + text-transform: uppercase; + text-align: center; + font-size: 0.933333333333333em; + font-weight: 700; + padding: 1.866666666666667em; + display: block; + text-decoration: none; +} +.morelink:hover, +.morelink:focus { + text-decoration: underline; +} +.dummy { + font-size: 1rem; + min-height: 25em; + position: relative; +} +.dummy:after { + content: 'Dummy content'; + position: absolute; + top: 50%; + left: 50%; + font-weight: 700; + font-size: 6em; + color: #f7f7f7; + text-shadow: 1px 1px 0 #eee, 2px 2px 0 #eee, 3px 3px 0 #eee, 4px 4px 0 #eee, 5px 5px 0 #eee, 6px 6px 0 #eee, 7px 7px 0 #eee; + margin: -100px 0 0 -350px; +} +.mainsection { + padding-top: 5.333333333333333em; + padding-bottom: 5.333333333333333em; +} +.mainsection_header { + text-align: center; + margin-bottom: 3.666666666666667em; +} +.mainsection_header p { + margin-top: 0; + font-size: 1.2em; +} +.mainsection_header_title { + margin: 0; + font-size: 2.4em; + text-align: center; +} +.mainsection_navigation { + text-align: center; +} +.lightbox { + font-size: 1rem; +} +.lightbox_overlay { + display: none; + font-size: 1rem; + background: rgba(0,0,0,0.75); + width: 100%; + height: 100%; + position: fixed; + left: 0; + top: 0; + z-index: 10; + -webkit-transition: opacity 0.3s ease; + -moz-transition: opacity 0.3s ease; + transition: opacity 0.3s ease; +} +.lightbox_content { + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + -moz-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + max-width: 90%; + max-height: 90%; + overflow: hidden; +} +.lightbox_close { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHVJREFUeNqsk4EJACEIReWawY2bMLh5LME7JNQEE4So/x9pCUTUVvaVuBKSieJpIAuOkYSgaDn6t/EmIdrMHtQHJ4g2/5pd4EFM8w7whK7ZAliQEZWWaVbY3AeqcbuEUhMj4fEZ8XTV6CNlzC7kyjCVxnkKMABEXRUAnXsRRQAAAABJRU5ErkJggg=="); + background-repeat: no-repeat; + background-position: center center; + width: 1.333333333333333em; + height: 0; + padding-top: 1.333333333333333em; + position: absolute; + top: 1.333333333333333em; + right: 1.333333333333333em; + cursor: pointer; + z-index: 2; +} +.stickyheader { + background: inherit; +} +.slideto { + background: inherit; + border-bottom: 0.266666666666667em solid transparent; +} +.slidetonav { + background: inherit; +} +.slidetoactive { + border-bottom-color: #f0ab00; + text-decoration: none; + color: #dedede; +} +.slidetoactive:hover, +.slidetoactive:focus { + border-bottom-color: #d89a00; +} diff --git a/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/resources/media.gss b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/resources/media.gss new file mode 100644 index 00000000000..611ff15f214 --- /dev/null +++ b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/resources/media.gss @@ -0,0 +1,450 @@ +/** + * The grid styles + */ +.grid, +.stackenblochen { + display: block; + width: 100%; + max-width: 80rem; + list-style: none; + margin: 0 auto; + zoom: 1; +} +.grid:before, +.stackenblochen:before, +.grid:after, +.stackenblochen:after { + content: ""; + display: table; +} +.grid:after, +.stackenblochen:after { + clear: both; +} +.grid *, +.stackenblochen * { + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.grid .grid, +.stackenblochen .grid, +.grid .stackenblochen, +.stackenblochen .stackenblochen { + width: auto; + max-width: none; + margin-left: -1rem; + margin-right: -1rem; +} +.column, +.columns { + float: left; + padding: 0 1rem; + position: relative; + width: 100%; +} +.column img, +.columns img { + max-width: 100%; + height: auto; + ms-interpolation-mode: bicubic; +} +.small1 { + width: 8.3333333333333%; +} +.small2 { + width: 16.6666666666667%; +} +.small3 { + width: 25%; +} +.small4 { + width: 33.3333333333333%; +} +.small5 { + width: 41.6666666666667%; +} +.small6 { + width: 50%; +} +.small7 { + width: 58.3333333333333%; +} +.small8 { + width: 66.6666666666667%; +} +.small9 { + width: 75%; +} +.small10 { + width: 83.3333333333333%; +} +.small11 { + width: 91.6666666666667%; +} +.small12 { + width: 100%; +} +.smalloffset0 { + margin-left: 0% !important; +} +.smalloffset1 { + margin-left: 8.3333333333333% !important; +} +.smalloffset2 { + margin-left: 16.6666666666667% !important; +} +.smalloffset3 { + margin-left: 25% !important; +} +.smalloffset4 { + margin-left: 33.3333333333333% !important; +} +.smalloffset5 { + margin-left: 41.6666666666667% !important; +} +.smalloffset6 { + margin-left: 50% !important; +} +.smalloffset7 { + margin-left: 58.3333333333333% !important; +} +.smalloffset8 { + margin-left: 66.6666666666667% !important; +} +.smalloffset9 { + margin-left: 75% !important; +} +.smalloffset10 { + margin-left: 83.3333333333333% !important; +} +.smalloffset11 { + margin-left: 91.6666666666667% !important; +} +.showonsmall { + display: inherit !important; +} +.hideonsmall { + display: none !important; +} +table.showonsmall { + display: table !important; +} +tr.showonsmall { + display: table-row !important; +} +td.showonsmall, +th.showonsmall { + display: table-cell !important; +} +.showonmedium { + display: none !important; +} +.hideonmedium { + display: inherit !important; +} +table.hideonmedium { + display: table !important; +} +tr.hideonmedium { + display: table-row !important; +} +td.hideonmedium, +th.hideonmedium { + display: table-cell !important; +} +.showonlarge { + display: none !important; +} +.hideonlarge { + display: inherit !important; +} +table.hideonlarge { + display: table !important; +} +tr.hideonlarge { + display: table-row !important; +} +td.hideonlarge, +th.hideonlarge { + display: table-cell !important; +} +.column.smallcentered, +.columns.smallcentered { + margin-left: auto; + margin-right: auto; + float: none; +} +.column.smalluncentered, +.columns.smalluncentered { + margin-left: 0; + margin-right: 0; + float: left !important; +} +@media (min-width: 45em) { + .medium1 { + width: 8.3333333333333%; + } + .medium2 { + width: 16.6666666666667%; + } + .medium3 { + width: 25%; + } + .medium4 { + width: 33.3333333333333%; + } + .medium5 { + width: 41.6666666666667%; + } + .medium6 { + width: 50%; + } + .medium7 { + width: 58.3333333333333%; + } + .medium8 { + width: 66.6666666666667%; + } + .medium9 { + width: 75%; + } + .medium10 { + width: 83.3333333333333%; + } + .medium11 { + width: 91.6666666666667%; + } + .medium12 { + width: 100%; + } + .mediumoffset0 { + margin-left: 0% !important; + } + .mediumoffset1 { + margin-left: 8.3333333333333% !important; + } + .mediumoffset2 { + margin-left: 16.6666666666667% !important; + } + .mediumoffset3 { + margin-left: 25% !important; + } + .mediumoffset4 { + margin-left: 33.3333333333333% !important; + } + .mediumoffset5 { + margin-left: 41.6666666666667% !important; + } + .mediumoffset6 { + margin-left: 50% !important; + } + .mediumoffset7 { + margin-left: 58.3333333333333% !important; + } + .mediumoffset8 { + margin-left: 66.6666666666667% !important; + } + .mediumoffset9 { + margin-left: 75% !important; + } + .mediumoffset10 { + margin-left: 83.3333333333333% !important; + } + .mediumoffset11 { + margin-left: 91.6666666666667% !important; + } + .showonsmall { + display: none !important; + } + .hideonsmall { + display: inherit !important; + } + table.hideonsmall { + display: table !important; + } + tr.hideonsmall { + display: table-row !important; + } + td.hideonsmall, + th.hideonsmall { + display: table-cell !important; + } + .showonmedium { + display: inherit !important; + } + .hideonmedium { + display: none !important; + } + table.showonmedium { + display: table !important; + } + tr.showonmedium { + display: table-row !important; + } + td.showonmedium, + th.showonmedium { + display: table-cell !important; + } + .showonlarge { + display: none !important; + } + .hideonlarge { + display: inherit !important; + } + table.hideonlarge { + display: table !important; + } + tr.hideonlarge { + display: table-row !important; + } + td.hideonlarge, + th.hideonlarge { + display: table-cell !important; + } + .column.mediumcentered, + .columns.mediumcentered { + margin-left: auto; + margin-right: auto; + float: none; + } + .column.mediumuncentered, + .columns.mediumuncentered { + margin-left: 0; + margin-right: 0; + float: left !important; + } +} +@media (min-width: 61em) { + .large1 { + width: 8.3333333333333%; + } + .large2 { + width: 16.6666666666667%; + } + .large3 { + width: 25%; + } + .large4 { + width: 33.3333333333333%; + } + .large5 { + width: 41.6666666666667%; + } + .large6 { + width: 50%; + } + .large7 { + width: 58.3333333333333%; + } + .large8 { + width: 66.6666666666667%; + } + .large9 { + width: 75%; + } + .large10 { + width: 83.3333333333333%; + } + .large11 { + width: 91.6666666666667%; + } + .large12 { + width: 100%; + } + .largeoffset0 { + margin-left: 0% !important; + } + .largeoffset1 { + margin-left: 8.3333333333333% !important; + } + .largeoffset2 { + margin-left: 16.6666666666667% !important; + } + .largeoffset3 { + margin-left: 25% !important; + } + .largeoffset4 { + margin-left: 33.3333333333333% !important; + } + .largeoffset5 { + margin-left: 41.6666666666667% !important; + } + .largeoffset6 { + margin-left: 50% !important; + } + .largeoffset7 { + margin-left: 58.3333333333333% !important; + } + .largeoffset8 { + margin-left: 66.6666666666667% !important; + } + .largeoffset9 { + margin-left: 75% !important; + } + .largeoffset10 { + margin-left: 83.3333333333333% !important; + } + .largeoffset11 { + margin-left: 91.6666666666667% !important; + } + .showonsmall { + display: none !important; + } + .hideonsmall { + display: inherit !important; + } + table.hideonsmall { + display: table !important; + } + tr.hideonsmall { + display: table-row !important; + } + td.hideonsmall, + th.hideonsmall { + display: table-cell !important; + } + .showonmedium { + display: none !important; + } + .hideonmedium { + display: inherit !important; + } + table.hideonmedium { + display: table !important; + } + tr.hideonmedium { + display: table-row !important; + } + td.hideonmedium, + th.hideonmedium { + display: table-cell !important; + } + .showonlarge { + display: inherit !important; + } + .hideonlarge { + display: none !important; + } + table.showonlarge { + display: table !important; + } + tr.showonlarge { + display: table-row !important; + } + td.showonlarge, + th.showonlarge { + display: table-cell !important; + } + .column.largecentered, + .columns.largecentered { + margin-left: auto; + margin-right: auto; + float: none; + } + .column.largeuncentered, + .columns.largeuncentered { + margin-left: 0; + margin-right: 0; + float: left !important; + } +} diff --git a/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/showcase/ComponentShowCase.java b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/showcase/ComponentShowCase.java new file mode 100644 index 00000000000..bd6f890cc59 --- /dev/null +++ b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/showcase/ComponentShowCase.java @@ -0,0 +1,53 @@ +package com.sap.sse.gwt.theme.client.showcase; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.dom.client.DivElement; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiChild; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.SimplePanel; +import com.google.gwt.user.client.ui.Widget; + +public class ComponentShowCase extends Composite { + + private static ComponentShowCaseUiBinder uiBinder = GWT.create(ComponentShowCaseUiBinder.class); + + interface ComponentShowCaseUiBinder extends UiBinder { + } + + @UiField + DivElement componentNameUi; + + @UiField + SimplePanel componentDescriptionUi; + + @UiField + SimplePanel componentPanelUi; + + private String name; + + public ComponentShowCase() { + initWidget(uiBinder.createAndBindUi(this)); + } + + public void setName(String name) { + this.name = name; + componentNameUi.setInnerText(name); + } + + @UiChild + public void addDescription(Widget description) { + componentDescriptionUi.setWidget(description); + } + + @UiChild + public void addComponent(Widget w) { + componentPanelUi.setWidget(w); + } + + public String getName() { + return this.name; + } + +} diff --git a/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/showcase/ComponentShowCase.ui.xml b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/showcase/ComponentShowCase.ui.xml new file mode 100644 index 00000000000..eeabbc8f25d --- /dev/null +++ b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/showcase/ComponentShowCase.ui.xml @@ -0,0 +1,29 @@ + + + + .outerpanel { + margin: 20px; + } + .componentName { + font-size: 20px; + font-weight: bold; + magin-bottom: 10px; + + } + .componentDescription { + margin-bottom: 30px; + border-bottom: 3px solid black; + padding: 20px; + width: 100%; + + } + + +
+ + + + +
+
\ No newline at end of file diff --git a/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/showcase/MainPage.java b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/showcase/MainPage.java new file mode 100644 index 00000000000..7ab3fd01d6c --- /dev/null +++ b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/showcase/MainPage.java @@ -0,0 +1,30 @@ +package com.sap.sse.gwt.theme.client.showcase; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.dom.client.Style.Unit; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.SimplePanel; +import com.google.gwt.user.client.ui.Widget; + +public class MainPage extends Composite { + + private static MainPageUiBinder uiBinder = GWT.create(MainPageUiBinder.class); + + interface MainPageUiBinder extends UiBinder { + } + + @UiField(provided = true) + SimplePanel contentUi; + + @UiField(provided = true) + ShowcaseStackLayoutPanel stackLayoutPanelUi; + + public MainPage() { + contentUi = new SimplePanel(); + stackLayoutPanelUi = new ShowcaseStackLayoutPanel(Unit.EM); + stackLayoutPanelUi.setTarget(contentUi); + initWidget(uiBinder.createAndBindUi(this)); + } +} diff --git a/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/showcase/MainPage.ui.xml b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/showcase/MainPage.ui.xml new file mode 100644 index 00000000000..bd21ccd17ee --- /dev/null +++ b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/showcase/MainPage.ui.xml @@ -0,0 +1,36 @@ + + + + + + + Components + + + + + + + + + + + + + + Styleguide + + + + + + + + + + + + + \ No newline at end of file diff --git a/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/showcase/Section.java b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/showcase/Section.java new file mode 100644 index 00000000000..d6407623138 --- /dev/null +++ b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/showcase/Section.java @@ -0,0 +1,50 @@ +package com.sap.sse.gwt.theme.client.showcase; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.event.dom.client.ClickHandler; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiChild; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.user.client.ui.AcceptsOneWidget; +import com.google.gwt.user.client.ui.Anchor; +import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.FlowPanel; +import com.google.gwt.user.client.ui.SimplePanel; +import com.google.gwt.user.client.ui.Widget; + +public class Section extends Composite { + private static ShowCaseSectionUiBinder uiBinder = GWT.create(ShowCaseSectionUiBinder.class); + + interface ShowCaseSectionUiBinder extends UiBinder { + } + + private AcceptsOneWidget target; + + @UiField + FlowPanel panelUi; + + public Section() { + initWidget(uiBinder.createAndBindUi(this)); + } + + public void setTargetContentArea(AcceptsOneWidget target) { + this.target = target; + } + + @UiChild + public void addItem(final Widget widget, String name) { + SimplePanel p = new SimplePanel(); + Anchor showCaseItem = new Anchor(name); + p.setWidget(showCaseItem); + showCaseItem.addClickHandler(new ClickHandler() { + + @Override + public void onClick(ClickEvent event) { + target.setWidget(widget); + } + }); + + panelUi.add(p); + } +} diff --git a/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/showcase/Section.ui.xml b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/showcase/Section.ui.xml new file mode 100644 index 00000000000..7f8562acc98 --- /dev/null +++ b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/showcase/Section.ui.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/showcase/ShowCaseResources.java b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/showcase/ShowCaseResources.java new file mode 100644 index 00000000000..2147603cd48 --- /dev/null +++ b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/showcase/ShowCaseResources.java @@ -0,0 +1,31 @@ +package com.sap.sse.gwt.theme.client.showcase; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.resources.client.ClientBundle; +import com.google.gwt.resources.client.CssResource; + +public interface ShowCaseResources extends ClientBundle { + public static final ShowCaseResources INSTANCE = GWT.create(ShowCaseResources.class); + + @Source("showcase.gss") + ShowcaseCss css(); + + public interface ShowcaseCss extends CssResource{ + String showcaseHeader(); + String showcaseContent(); + String styleGuideHeader(); + String styleGuideContent(); + + String styleGuideRow(); + String styleGuideRowDescription(); + String styleGuideRowDescriptionTitle(); + String styleGuideRowContent(); + String styleGuideRowCode(); + String styleGuideRowDescription_codeLink(); + + // TODO: these style should come from the main.css + String styleGuideDetailsTypeface_semibold(); + String styleGuideDetailsTypeface_bold(); + String styleGuideDetailsTypeface_regular(); + } +} \ No newline at end of file diff --git a/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/showcase/ShowcaseStackLayoutPanel.java b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/showcase/ShowcaseStackLayoutPanel.java new file mode 100644 index 00000000000..4889e6aa5ec --- /dev/null +++ b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/showcase/ShowcaseStackLayoutPanel.java @@ -0,0 +1,27 @@ +package com.sap.sse.gwt.theme.client.showcase; + +import com.google.gwt.dom.client.Style.Unit; +import com.google.gwt.user.client.ui.SimplePanel; +import com.google.gwt.user.client.ui.StackLayoutPanel; +import com.google.gwt.user.client.ui.Widget; + +public class ShowcaseStackLayoutPanel extends StackLayoutPanel { + private SimplePanel target; + + public ShowcaseStackLayoutPanel(Unit unit) { + super(unit); + } + + public void setTarget(SimplePanel target) { + this.target = target; + } + + @Override + public void add(Widget widget, String header, boolean asHtml, double headerSize) { + if (widget instanceof Section) { + Section section = (Section) widget; + section.setTargetContentArea(target); + } + super.add(widget, header, asHtml, headerSize); + } +} diff --git a/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/showcase/components/LoadingIndicatorShowcase.java b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/showcase/components/LoadingIndicatorShowcase.java new file mode 100644 index 00000000000..dcd61d485e6 --- /dev/null +++ b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/showcase/components/LoadingIndicatorShowcase.java @@ -0,0 +1,23 @@ +package com.sap.sse.gwt.theme.client.showcase.components; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.Widget; +import com.sap.sse.gwt.theme.client.component.loadingindicator.LoadingIndicator; + +public class LoadingIndicatorShowcase extends Composite { + + private static LoadingIndicatorShowcaseUiBinder uiBinder = GWT.create(LoadingIndicatorShowcaseUiBinder.class); + + interface LoadingIndicatorShowcaseUiBinder extends UiBinder { + } + + @UiField + LoadingIndicator loadingIndicator; + + public LoadingIndicatorShowcase() { + initWidget(uiBinder.createAndBindUi(this)); + } +} diff --git a/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/showcase/components/LoadingIndicatorShowcase.ui.xml b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/showcase/components/LoadingIndicatorShowcase.ui.xml new file mode 100644 index 00000000000..ee194856838 --- /dev/null +++ b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/showcase/components/LoadingIndicatorShowcase.ui.xml @@ -0,0 +1,20 @@ + + + + + + + A Loading indicator. +

Import: xmlns:sap="urn:import:com.sap.sse.gwt.theme.client.component.loadingindicator"

+
+
+ + + + + +
+
\ No newline at end of file diff --git a/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/showcase/components/SAPFooterShowcase.java b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/showcase/components/SAPFooterShowcase.java new file mode 100644 index 00000000000..7b570db82ce --- /dev/null +++ b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/showcase/components/SAPFooterShowcase.java @@ -0,0 +1,25 @@ +package com.sap.sse.gwt.theme.client.showcase.components; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.Widget; +import com.sap.sse.gwt.theme.client.component.sapfooter.SAPFooter; + +public class SAPFooterShowcase extends Composite { + + private static SAPHeaderShowcaseUiBinder uiBinder = GWT.create(SAPHeaderShowcaseUiBinder.class); + + interface SAPHeaderShowcaseUiBinder extends UiBinder { + } + + @UiField(provided = true) + SAPFooter sapFooter; + + public SAPFooterShowcase() { + sapFooter = new SAPFooter(); + + initWidget(uiBinder.createAndBindUi(this)); + } +} diff --git a/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/showcase/components/SAPFooterShowcase.ui.xml b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/showcase/components/SAPFooterShowcase.ui.xml new file mode 100644 index 00000000000..2b993681cc1 --- /dev/null +++ b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/showcase/components/SAPFooterShowcase.ui.xml @@ -0,0 +1,20 @@ + + + + + + + A SAP footer. +

Import: xmlns:sap="urn:import:com.sap.sse.gwt.theme.client.component.sapfooter"

+
+
+ + + + + +
+
\ No newline at end of file diff --git a/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/showcase/components/SAPHeaderShowcase.java b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/showcase/components/SAPHeaderShowcase.java new file mode 100644 index 00000000000..aa07434270e --- /dev/null +++ b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/showcase/components/SAPHeaderShowcase.java @@ -0,0 +1,25 @@ +package com.sap.sse.gwt.theme.client.showcase.components; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.Widget; +import com.sap.sse.gwt.theme.client.component.sapheader.SAPHeader; + +public class SAPHeaderShowcase extends Composite { + + private static SAPHeaderShowcaseUiBinder uiBinder = GWT.create(SAPHeaderShowcaseUiBinder.class); + + interface SAPHeaderShowcaseUiBinder extends UiBinder { + } + + @UiField(provided = true) + SAPHeader sapHeader; + + public SAPHeaderShowcase() { + sapHeader = new SAPHeader("Sailing Analytics", "Demo page", false); + + initWidget(uiBinder.createAndBindUi(this)); + } +} diff --git a/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/showcase/components/SAPHeaderShowcase.ui.xml b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/showcase/components/SAPHeaderShowcase.ui.xml new file mode 100644 index 00000000000..ccf44dc116c --- /dev/null +++ b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/showcase/components/SAPHeaderShowcase.ui.xml @@ -0,0 +1,20 @@ + + + + + + + A simple header with SAP logo and title. +

Import: xmlns:sap="urn:import:com.sap.sse.gwt.theme.client.component.sapheader"

+
+
+ + + + + +
+
\ No newline at end of file diff --git a/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/showcase/showcase.gss b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/showcase/showcase.gss new file mode 100644 index 00000000000..1a9a5c4b88e --- /dev/null +++ b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/showcase/showcase.gss @@ -0,0 +1,78 @@ +.showcaseHeader { + width: 100%; + display: block; + margin: 5px; +} + +.showcaseContent { + width: 100%; + display: block; + margin: 5px; +} + +.styleGuideHeader { + width: 100%; + display: block; + margin: 5px; +} + +.styleGuideContent { + width: 100%; + display: block; + margin: 5px; +} + +.styleGuideRow { + clear: both; + margin-top: 50px; + overflow: hidden; +} + +.styleGuideRowDescription { + float: left; + font-weight: 700; +} + +.styleGuideRowDescriptionTitle { + float: left; +} + +.styleGuideRowContent { + float: left; +} + +.styleGuideRowCode { + background-color: #EEEEEE; + border: 1px solid #CCCCCC; + display: none; + float: left; + font-family: "Lucida Console",Monaco,"Courier New",Courier,monospace; + margin-top: 20px; + padding: 20px 10px; +} + +.styleGuideRowDescription_codeLink { + color: #999999; + display: none; + float: right; + font-family: monospace; + font-size: 12px; + font-weight: 400; + line-height: 23px; + margin-right: 25px; +} + +.styleGuideDetailsTypeface_semibold { + font-size: 22px; + font-weight: 600; +} + +.styleGuideDetailsTypeface_regular { + font-size: 22px; +} + +.styleGuideDetailsTypeface_bold { + font-size: 22px; + font-weight: 700; +} + diff --git a/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/showcase/styleguide/AbstractStyleguideComposite.java b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/showcase/styleguide/AbstractStyleguideComposite.java new file mode 100644 index 00000000000..45919a4a389 --- /dev/null +++ b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/showcase/styleguide/AbstractStyleguideComposite.java @@ -0,0 +1,13 @@ +package com.sap.sse.gwt.theme.client.showcase.styleguide; + +import com.google.gwt.user.client.ui.Composite; +import com.sap.sse.gwt.theme.client.resources.ThemeResources; +import com.sap.sse.gwt.theme.client.showcase.ShowCaseResources; + +public class AbstractStyleguideComposite extends Composite { + public AbstractStyleguideComposite() { + ThemeResources.INSTANCE.mediaCss().ensureInjected(); + ThemeResources.INSTANCE.mainCss().ensureInjected(); + ShowCaseResources.INSTANCE.css().ensureInjected(); + } +} diff --git a/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/showcase/styleguide/TypefaceStyleguide.java b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/showcase/styleguide/TypefaceStyleguide.java new file mode 100644 index 00000000000..f6162d6643f --- /dev/null +++ b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/showcase/styleguide/TypefaceStyleguide.java @@ -0,0 +1,19 @@ +package com.sap.sse.gwt.theme.client.showcase.styleguide; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.user.client.ui.Widget; + +public class TypefaceStyleguide extends AbstractStyleguideComposite { + + private static TypefaceStyleguideUiBinder uiBinder = GWT.create(TypefaceStyleguideUiBinder.class); + + interface TypefaceStyleguideUiBinder extends UiBinder { + } + + public TypefaceStyleguide() { + super(); + + initWidget(uiBinder.createAndBindUi(this)); + } +} diff --git a/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/showcase/styleguide/TypefaceStyleguide.ui.xml b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/showcase/styleguide/TypefaceStyleguide.ui.xml new file mode 100644 index 00000000000..64479c7583c --- /dev/null +++ b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/showcase/styleguide/TypefaceStyleguide.ui.xml @@ -0,0 +1,44 @@ + + + + + + + + Typeface styleguide + + + + +
+
+
+
REGULAR
+ </> +
+
Grumpy wizards make toxic brew for the evil queen and jack.
+
Code und sooo
+
+
+
+
SEMIBOLD
+ </> +
+
Grumpy wizards make toxic brew for the evil queen and jack.
+
Code und sooo
+
+
+
+
BOLD
+ </> +
+
Grumpy wizards make toxic brew for the evil queen and jack.
+
Code und sooo
+
+
+
+
+
+
\ No newline at end of file diff --git a/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/util/FullscreenUtil.java b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/util/FullscreenUtil.java new file mode 100644 index 00000000000..27ff25bebd3 --- /dev/null +++ b/java/com.sap.sse.gwt.theme/src/main/java/com/sap/sse/gwt/theme/client/util/FullscreenUtil.java @@ -0,0 +1,27 @@ +package com.sap.sse.gwt.theme.client.util; + +/** + * A utility class to set the browser to fullscreen mode + * @author c5163874 (Frank) + * + */ +public class FullscreenUtil { + + public static void requestFullscreen() { + nativeRequestFullScreen(); + }; + + private static native void nativeRequestFullScreen() /*-{ + var element = $doc.documentElement; + if(element.requestFullscreen) { + element.requestFullscreen(); + } else if(element.mozRequestFullScreen) { + element.mozRequestFullScreen(); + } else if(element.webkitRequestFullscreen) { + element.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT); + } else if(element.msRequestFullscreen) { + element.msRequestFullscreen(); + } + }-*/; + +} diff --git a/java/com.tractrac.clientmodule/META-INF/MANIFEST.MF b/java/com.tractrac.clientmodule/META-INF/MANIFEST.MF index b10a81fdeaa..900b4166852 100644 --- a/java/com.tractrac.clientmodule/META-INF/MANIFEST.MF +++ b/java/com.tractrac.clientmodule/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: TracTrac Client module Bundle-SymbolicName: com.tractrac.clientmodule -Bundle-Version: 3.0.9 +Bundle-Version: 3.0.10 Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Bundle-ClassPath: ., lib/TracAPI.jar diff --git a/java/com.tractrac.clientmodule/README.txt b/java/com.tractrac.clientmodule/README.txt index 08aed822c98..a8c6776fdc9 100644 --- a/java/com.tractrac.clientmodule/README.txt +++ b/java/com.tractrac.clientmodule/README.txt @@ -16,6 +16,21 @@ It contains also some files: - test.sh -> script that compiles the code in the src folder, creates the test.jar library and execute the code of the example. - Manifest.txt -> manifest used to create the test.jar file +******************************************** +************* TracAPI 3.0.10 *************** +******************************************** +This is a final version. Only fixes bugs in the implementation + +Release date: 17/02/2015 +Build number: 9938 + + 1) Bugs + + - It fixes the same bug described in the release 3.0.9 that it was not fixed. The release 3.0.9 fixed + the synchronization issue between different threads but the ConcurrentModificationException happens + when the same thread is accessing to the list. The synchronization at method level doesn't work + in this case (Reported by Axel Uhl,07/02/2015) + ******************************************** ************* TracAPI 3.0.9 **************** ******************************************** diff --git a/java/com.tractrac.clientmodule/lib/TracAPI.jar b/java/com.tractrac.clientmodule/lib/TracAPI.jar index f3d5016f5d8..7a33f5cd105 100644 Binary files a/java/com.tractrac.clientmodule/lib/TracAPI.jar and b/java/com.tractrac.clientmodule/lib/TracAPI.jar differ diff --git a/java/pom.xml b/java/pom.xml index 686a14522c4..3374be9270a 100755 --- a/java/pom.xml +++ b/java/pom.xml @@ -31,6 +31,7 @@ com.sap.sse.operationaltransformation com.sap.sse.replication com.sap.sse.filestorage + com.sap.sse.gwt.theme com.sap.sailing.domain.common com.sap.sailing.domain.shared.android com.sap.sailing.domain