Repository: empire-db Updated Branches: refs/heads/master 795b587bd -> f9a7d1091
EMPIREDB-271 Vue project: error handling added Project: http://git-wip-us.apache.org/repos/asf/empire-db/repo Commit: http://git-wip-us.apache.org/repos/asf/empire-db/commit/f9a7d109 Tree: http://git-wip-us.apache.org/repos/asf/empire-db/tree/f9a7d109 Diff: http://git-wip-us.apache.org/repos/asf/empire-db/diff/f9a7d109 Branch: refs/heads/master Commit: f9a7d109168f8e796e33a8c5a552c7371ec576bd Parents: 795b587 Author: Rainer Döbele <[email protected]> Authored: Tue Oct 2 13:55:09 2018 +0200 Committer: Rainer Döbele <[email protected]> Committed: Tue Oct 2 13:55:09 2018 +0200 ---------------------------------------------------------------------- .../empire/rest/app/RecordInitException.java | 54 +++++++++++++++++++ .../apache/empire/rest/json/JsoErrorInfo.java | 48 +++++++++++++++++ .../rest/service/AuthenticationService.java | 26 +++------ .../empire/rest/service/EmployeeService.java | 56 +++++++++++++------- .../org/apache/empire/rest/service/Service.java | 45 ++++++++++++++++ .../empire/vue/sample/db/RecordContext.java | 8 +++ .../vue/sample/db/records/SampleRecord.java | 19 ++++++- .../src/main/vue/src/App.vue | 49 ++++++++++++++++- .../src/main/vue/src/api/emp-api.js | 2 +- .../src/main/vue/src/assets/css/layout.css | 6 +-- .../src/main/vue/src/pages/employeeDetail.vue | 15 +++--- .../src/main/vue/src/pages/employeeList.vue | 4 +- .../src/main/vue/src/pages/login.vue | 8 +-- 13 files changed, 277 insertions(+), 63 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/empire-db/blob/f9a7d109/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/rest/app/RecordInitException.java ---------------------------------------------------------------------- diff --git a/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/rest/app/RecordInitException.java b/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/rest/app/RecordInitException.java new file mode 100644 index 0000000..42e0a79 --- /dev/null +++ b/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/rest/app/RecordInitException.java @@ -0,0 +1,54 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.empire.rest.app; + +import java.util.List; + +import org.apache.empire.commons.ErrorType; +import org.apache.empire.db.exceptions.FieldValueException; +import org.apache.empire.exceptions.EmpireException; + +public class RecordInitException extends EmpireException +{ + private static final long serialVersionUID = 1L; + + public static final ErrorType recordInitErrorType = new ErrorType("error.db.recordInitErrorType", "Record initialization failed: {0}"); + + private static String[] extractFieldErrorMessage(List<FieldValueException> fieldExeptions) + { + String[] params = new String[fieldExeptions.size()]; + for (int i=0; i<params.length; i++) + params[i] = fieldExeptions.get(i).getMessage(); + return params; + } + + private final List<FieldValueException> fieldExeptions; + + public RecordInitException(List<FieldValueException> fieldExeptions) + { + super(recordInitErrorType, extractFieldErrorMessage(fieldExeptions)); + this.fieldExeptions = fieldExeptions; + } + + public List<FieldValueException> getFieldExeptions() + { + return fieldExeptions; + } + +} http://git-wip-us.apache.org/repos/asf/empire-db/blob/f9a7d109/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/rest/json/JsoErrorInfo.java ---------------------------------------------------------------------- diff --git a/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/rest/json/JsoErrorInfo.java b/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/rest/json/JsoErrorInfo.java new file mode 100644 index 0000000..9945911 --- /dev/null +++ b/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/rest/json/JsoErrorInfo.java @@ -0,0 +1,48 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.empire.rest.json; + +import java.util.LinkedHashSet; +import java.util.List; + +import org.apache.empire.exceptions.EmpireException; +import org.apache.empire.rest.app.TextResolver; + +public class JsoErrorInfo extends LinkedHashSet<String> +{ + private static final long serialVersionUID = 1L; + + public JsoErrorInfo(String message) + { + this.add(message); + } + + public JsoErrorInfo(EmpireException e, TextResolver resolver) + { + this.add(resolver.getExceptionMessage(e)); + } + + public JsoErrorInfo(List<? extends EmpireException> list, TextResolver resolver) + { + for (EmpireException e : list) + { + this.add(resolver.getExceptionMessage(e)); + } + } +} http://git-wip-us.apache.org/repos/asf/empire-db/blob/f9a7d109/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/rest/service/AuthenticationService.java ---------------------------------------------------------------------- diff --git a/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/rest/service/AuthenticationService.java b/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/rest/service/AuthenticationService.java index 5b8b330..c5f9b2e 100644 --- a/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/rest/service/AuthenticationService.java +++ b/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/rest/service/AuthenticationService.java @@ -20,9 +20,6 @@ package org.apache.empire.rest.service; import java.util.UUID; -import javax.json.Json; -import javax.json.JsonObject; -import javax.json.JsonObjectBuilder; import javax.servlet.http.HttpServletRequest; import javax.ws.rs.Consumes; import javax.ws.rs.FormParam; @@ -35,6 +32,7 @@ import javax.ws.rs.core.NewCookie; import javax.ws.rs.core.Response; import org.apache.empire.commons.StringUtils; +import org.apache.empire.rest.json.JsoErrorInfo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -49,30 +47,22 @@ public class AuthenticationService @Produces(MediaType.APPLICATION_JSON) public Response login(@FormParam("username") String username, @FormParam("password") String password) { - JsonObjectBuilder jsonObjBuilder; // Check params if (StringUtils.isEmpty(username) || StringUtils.isEmpty(password)) - { - jsonObjBuilder = Json.createObjectBuilder(); - jsonObjBuilder.add("error", "Invalid username or password."); - JsonObject jsonObj = jsonObjBuilder.build(); - return Response.status(Response.Status.BAD_REQUEST).entity(jsonObj.toString()).build(); + { // empty username or password + JsoErrorInfo errorInfo = new JsoErrorInfo("Invalid username or password."); + return Response.status(Response.Status.BAD_REQUEST).entity(errorInfo).build(); } - + // Validate if (username.equals("bad") || password.equals("password")) - { - jsonObjBuilder = Json.createObjectBuilder(); - jsonObjBuilder.add("error", "Bad user or password"); - JsonObject jsonObj = jsonObjBuilder.build(); - return Response.status(Response.Status.UNAUTHORIZED).entity(jsonObj.toString()).build(); + { // simulate invalid username / password + JsoErrorInfo errorInfo = new JsoErrorInfo("Bad user or password"); + return Response.status(Response.Status.UNAUTHORIZED).entity(errorInfo).build(); } - log.info("Log in for user {}", username); - // Set Cookie String cookieValue = UUID.randomUUID().toString().replaceAll("-", ""); NewCookie cookie = new NewCookie(Service.Consts.LOGIN_COOKIE_NAME, cookieValue, "/", null, null, NewCookie.DEFAULT_MAX_AGE, false); - // OK return Response.ok().cookie(cookie).build(); } http://git-wip-us.apache.org/repos/asf/empire-db/blob/f9a7d109/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/rest/service/EmployeeService.java ---------------------------------------------------------------------- diff --git a/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/rest/service/EmployeeService.java b/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/rest/service/EmployeeService.java index d22d5f5..aef35f5 100644 --- a/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/rest/service/EmployeeService.java +++ b/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/rest/service/EmployeeService.java @@ -37,11 +37,13 @@ import org.apache.empire.db.DBCommand; import org.apache.empire.db.DBJoinType; import org.apache.empire.db.DBReader; import org.apache.empire.exceptions.EmpireException; +import org.apache.empire.rest.app.RecordInitException; import org.apache.empire.rest.app.SampleServiceApp; import org.apache.empire.rest.app.TextResolver; import org.apache.empire.rest.json.JsoColumnMeta; import org.apache.empire.rest.json.JsoRecordData; import org.apache.empire.rest.json.JsoResultWithMeta; +import org.apache.empire.vue.sample.db.RecordContext; import org.apache.empire.vue.sample.db.SampleDB; import org.apache.empire.vue.sample.db.SampleDB.TDepartments; import org.apache.empire.vue.sample.db.SampleDB.TEmployees; @@ -59,7 +61,8 @@ public class EmployeeService extends Service { @Produces(MediaType.APPLICATION_JSON) public Response getEmployeeFilter() { - TextResolver txtres = SampleServiceApp.instance().getTextResolver(Locale.ENGLISH); + RecordContext ctx = this.getRecordContext(); + TextResolver textResolver = ctx.getTextResolver(); // Query Department options SampleDB db = getDatabase(); @@ -68,16 +71,16 @@ public class EmployeeService extends Service { cmd.join (db.T_DEPARTMENTS.DEPARTMENT_ID, db.T_EMPLOYEES.DEPARTMENT_ID); cmd.groupBy(cmd.getSelectExprList()); cmd.orderBy(db.T_DEPARTMENTS.NAME); - Options departmentOptions = db.queryOptionList(cmd, getRecordContext().getConnection()); + Options departmentOptions = db.queryOptionList(cmd, ctx.getConnection()); // Create Metadata TEmployees TE = db.T_EMPLOYEES; JsoColumnMeta[] meta = new JsoColumnMeta[] { - new JsoColumnMeta(TE.EMPLOYEE_ID, txtres), - new JsoColumnMeta(TE.FIRST_NAME, txtres), - new JsoColumnMeta(TE.LAST_NAME, txtres), - new JsoColumnMeta(TE.DEPARTMENT_ID, txtres, departmentOptions, false, false, false), - new JsoColumnMeta(TE.GENDER, txtres), + new JsoColumnMeta(TE.EMPLOYEE_ID, textResolver), + new JsoColumnMeta(TE.FIRST_NAME, textResolver), + new JsoColumnMeta(TE.LAST_NAME, textResolver), + new JsoColumnMeta(TE.DEPARTMENT_ID, textResolver, departmentOptions, false, false, false), + new JsoColumnMeta(TE.GENDER, textResolver), }; JsoRecordData filter = new JsoRecordData(meta); @@ -142,16 +145,17 @@ public class EmployeeService extends Service { @Produces(MediaType.APPLICATION_JSON) public Response getEmployee(@PathParam("employeeId") int employeeId) { + RecordContext ctx = this.getRecordContext(); try { // return a record - EmployeeRecord rec = new EmployeeRecord(getDatabase(), getRecordContext()); + EmployeeRecord rec = new EmployeeRecord(getDatabase(), ctx); rec.read(employeeId); JsoRecordData emp = new JsoRecordData(rec); return Response.ok(new JsoResultWithMeta(emp, rec.getMeta())).build(); } catch(EmpireException e) { log.error("Unable to load employee with id {}", employeeId); - return Response.serverError().build(); + return getErrorResponse(e, ctx); } } @@ -160,29 +164,42 @@ public class EmployeeService extends Service { @Produces(MediaType.APPLICATION_JSON) public Response addEmployee() { + RecordContext ctx = this.getRecordContext(); try { // return a record - EmployeeRecord rec = new EmployeeRecord(getDatabase(), getRecordContext()); + EmployeeRecord rec = new EmployeeRecord(getDatabase(), ctx); rec.create(); JsoRecordData emp = new JsoRecordData(rec); return Response.ok(new JsoResultWithMeta(emp, rec.getMeta())).build(); } catch(EmpireException e) { log.error("Unable to create an employee record"); - return Response.serverError().build(); + return getErrorResponse(e, ctx); } } @POST - @Path("/set") + @Path("/update") @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) public Response updateEmployee(JsoRecordData employeeData) { - EmployeeRecord rec = new EmployeeRecord(getDatabase(), getRecordContext()); - rec.init(employeeData, employeeData.isNewRecord()); - rec.update(); - - return Response.ok().build(); + RecordContext ctx = this.getRecordContext(); + try { + // return a record + EmployeeRecord rec = new EmployeeRecord(getDatabase(), ctx); + rec.init(employeeData, employeeData.isNewRecord()); + rec.update(); + return Response.ok().build(); + + } catch(RecordInitException e) { + log.error("Record initialization failed due to {}", e.getMessage()); + return getErrorResponse(e.getFieldExeptions(), ctx); + + } catch(EmpireException e) { + log.error("Unable to update employee with id {}", employeeData.get("employeeId")); + return getErrorResponse(e, ctx); + } } @GET @@ -190,15 +207,16 @@ public class EmployeeService extends Service { @Produces(MediaType.APPLICATION_JSON) public Response deleteEmployee(@PathParam("employeeId") int employeeId) { + RecordContext ctx = this.getRecordContext(); try { // return a record SampleDB db = getDatabase(); - db.T_EMPLOYEES.deleteRecord(employeeId, getRecordContext().getConnection()); + db.T_EMPLOYEES.deleteRecord(employeeId, ctx.getConnection()); return Response.ok().build(); } catch(EmpireException e) { log.error("Unable to delete employee with id {}", employeeId); - return Response.serverError().build(); + return getErrorResponse(e, ctx); } } http://git-wip-us.apache.org/repos/asf/empire-db/blob/f9a7d109/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/rest/service/Service.java ---------------------------------------------------------------------- diff --git a/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/rest/service/Service.java b/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/rest/service/Service.java index 2328c06..f087e82 100644 --- a/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/rest/service/Service.java +++ b/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/rest/service/Service.java @@ -19,13 +19,20 @@ package org.apache.empire.rest.service; import java.sql.Connection; +import java.util.List; +import java.util.Locale; import javax.servlet.ServletContext; import javax.servlet.ServletRequest; import javax.servlet.http.HttpServletRequest; import javax.ws.rs.container.ContainerRequestContext; import javax.ws.rs.core.Context; +import javax.ws.rs.core.Response; +import org.apache.empire.exceptions.EmpireException; +import org.apache.empire.rest.app.SampleServiceApp; +import org.apache.empire.rest.app.TextResolver; +import org.apache.empire.rest.json.JsoErrorInfo; import org.apache.empire.vue.sample.db.RecordContext; import org.apache.empire.vue.sample.db.SampleDB; import org.glassfish.jersey.server.ContainerRequest; @@ -58,10 +65,12 @@ public abstract class Service { public static class ServiceRecordContext implements RecordContext { private final Connection conn; + private final TextResolver textResolver; public ServiceRecordContext(Connection conn) { this.conn = conn; + this.textResolver = SampleServiceApp.instance().getTextResolver(Locale.ENGLISH); } @Override @@ -69,6 +78,12 @@ public abstract class Service { { return conn; } + + @Override + public TextResolver getTextResolver() + { + return textResolver; + } } @Context @@ -97,6 +112,36 @@ public abstract class Service { return this.req; } + /** + * EmpireException + * @param e the exception + * @param ctx the record context + * @return the error response + */ + + public Response getErrorResponse(EmpireException e, RecordContext ctx) { + return Response.serverError().entity(new JsoErrorInfo(e, ctx.getTextResolver())).build(); + } + + /** + * Multiple Exceptions + * @param extns the list of exceptions + * @param ctx the record context + * @return the error response + */ + public Response getErrorResponse(List<? extends EmpireException> extns, RecordContext ctx) { + return Response.serverError().entity(new JsoErrorInfo(extns, ctx.getTextResolver())).build(); + } + + /** + * General error + * @param e + * @return the error response + */ + public Response getErrorResponse(Exception e) { + return Response.serverError().build(); + } + public String getRemoteAddr() { // TODO check X-Real-IP / X-Forwarded-For return this.req.getRemoteAddr(); http://git-wip-us.apache.org/repos/asf/empire-db/blob/f9a7d109/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/vue/sample/db/RecordContext.java ---------------------------------------------------------------------- diff --git a/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/vue/sample/db/RecordContext.java b/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/vue/sample/db/RecordContext.java index f4c9c0e..32d9418 100644 --- a/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/vue/sample/db/RecordContext.java +++ b/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/vue/sample/db/RecordContext.java @@ -20,6 +20,8 @@ package org.apache.empire.vue.sample.db; import java.sql.Connection; +import org.apache.empire.rest.app.TextResolver; + /** * Provide access to info and resources for a record instance * Add more to @@ -33,6 +35,12 @@ public interface RecordContext * @return the JDBC connection */ Connection getConnection(); + + /** + * provides access to the text resolver + * @return the TextResolver + */ + TextResolver getTextResolver(); /** * provide access to the current user http://git-wip-us.apache.org/repos/asf/empire-db/blob/f9a7d109/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/vue/sample/db/records/SampleRecord.java ---------------------------------------------------------------------- diff --git a/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/vue/sample/db/records/SampleRecord.java b/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/vue/sample/db/records/SampleRecord.java index 7acd4b4..eba7767 100644 --- a/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/vue/sample/db/records/SampleRecord.java +++ b/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/vue/sample/db/records/SampleRecord.java @@ -18,12 +18,15 @@ */ package org.apache.empire.vue.sample.db.records; +import java.util.ArrayList; import java.util.List; import java.util.Locale; import org.apache.empire.commons.Options; import org.apache.empire.db.DBColumn; import org.apache.empire.db.DBRecord; +import org.apache.empire.db.exceptions.FieldValueException; +import org.apache.empire.rest.app.RecordInitException; import org.apache.empire.rest.app.SampleServiceApp; import org.apache.empire.rest.app.TextResolver; import org.apache.empire.rest.json.JsoColumnMeta; @@ -97,6 +100,7 @@ public abstract class SampleRecord<T extends SampleTable> extends DBRecord { super.read(T, key, recordContext.getConnection()); } // set all fields + List<FieldValueException> exptns = new ArrayList<FieldValueException>(0); for (DBColumn c : T.getColumns()) { // skip all key columns if (T.isKeyColumn(c)) @@ -110,8 +114,19 @@ public abstract class SampleRecord<T extends SampleTable> extends DBRecord { continue; } Object value = data.getValue(prop, c.getDataType()); - // set Value - this.setValue(c, value); + // set Value + try { + // set the value + this.setValue(c, value); + } catch(FieldValueException e) { + // add exception to list + exptns.add(e); + } + } + // Exceptions? + if (!exptns.isEmpty()) + { // Init failed with exceptions + throw new RecordInitException(exptns); } } http://git-wip-us.apache.org/repos/asf/empire-db/blob/f9a7d109/empire-db-examples/empire-db-example-vue/src/main/vue/src/App.vue ---------------------------------------------------------------------- diff --git a/empire-db-examples/empire-db-example-vue/src/main/vue/src/App.vue b/empire-db-examples/empire-db-example-vue/src/main/vue/src/App.vue index 880dbcd..6827a69 100644 --- a/empire-db-examples/empire-db-example-vue/src/main/vue/src/App.vue +++ b/empire-db-examples/empire-db-example-vue/src/main/vue/src/App.vue @@ -21,6 +21,14 @@ <button class="rdp-button" @click="doLogout" v-if="this.isLoggedIn()">Logout</button> </div> + <div id="messages" v-if="messages"> + <ul> + <template v-for="item in messages"> + <li>{{item}}</li> + </template> + </ul> + </div> + <router-view></router-view> </div> @@ -35,7 +43,9 @@ data () { return { - employeeFilter: undefined + employeeFilter: undefined, + messages: undefined, + redirectWithError: false } }, @@ -43,6 +53,16 @@ this.startup() }, + watch: { + $route (to, from) { + if (this.redirectWithError) { + this.redirectWithError = false + } else { + this.clearMessages() + } + } + }, + methods: { startup: function () { EMPAPI.debug('Application startup! Vue version is ' + Vue.version) @@ -50,6 +70,33 @@ clearData: function () { this.employeeFilter = undefined }, + clearMessages: function () { + this.messages = undefined + }, + addMessages: function (msgs) { + if (this.messages) { + this.messages = this.messages.concat(msgs) + } else { + this.messages = msgs + } + }, + redirect: function (target) { + this.clearMessages() + this.$router.push(target) + }, + handleError: function (error, target) { + // redirect to target + if (target) { + this.redirectWithError = true + this.$router.push(target) + } + // set message + if (error.responseJSON) { + this.addMessages(error.responseJSON) + } else { + this.addMessages([ error.statusText ]) + } + }, isLoggedIn: function () { if (EMPAPI.loggedIn === undefined) { EMPAPI.debug('EMPAPI.loggedIn is undefined!') http://git-wip-us.apache.org/repos/asf/empire-db/blob/f9a7d109/empire-db-examples/empire-db-example-vue/src/main/vue/src/api/emp-api.js ---------------------------------------------------------------------- diff --git a/empire-db-examples/empire-db-example-vue/src/main/vue/src/api/emp-api.js b/empire-db-examples/empire-db-example-vue/src/main/vue/src/api/emp-api.js index 343655a..ae4d046 100644 --- a/empire-db-examples/empire-db-example-vue/src/main/vue/src/api/emp-api.js +++ b/empire-db-examples/empire-db-example-vue/src/main/vue/src/api/emp-api.js @@ -134,7 +134,7 @@ const EMPAPI = { }, updateEmployee: function (employeeData) { - return AJAX.postJSON('/employee/set', employeeData) + return AJAX.postJSON('/employee/update', employeeData) }, deleteEmployee: function (employeeId) { http://git-wip-us.apache.org/repos/asf/empire-db/blob/f9a7d109/empire-db-examples/empire-db-example-vue/src/main/vue/src/assets/css/layout.css ---------------------------------------------------------------------- diff --git a/empire-db-examples/empire-db-example-vue/src/main/vue/src/assets/css/layout.css b/empire-db-examples/empire-db-example-vue/src/main/vue/src/assets/css/layout.css index 2d1b0dd..e43c767 100644 --- a/empire-db-examples/empire-db-example-vue/src/main/vue/src/assets/css/layout.css +++ b/empire-db-examples/empire-db-example-vue/src/main/vue/src/assets/css/layout.css @@ -64,8 +64,8 @@ A:hover { text-decoration:underline;} #messages ul { - background-color: #FBF0F0; - border:2px solid #8F99EF; + background-color: #FBF0F0; + border:2px solid #922727; list-style-type: square; padding: 8px; padding-left: 24px; @@ -79,7 +79,7 @@ A:hover { text-decoration:underline;} padding-right:5px; */ color: #922727; - font-weight: bold; + font-weight: bold; } http://git-wip-us.apache.org/repos/asf/empire-db/blob/f9a7d109/empire-db-examples/empire-db-example-vue/src/main/vue/src/pages/employeeDetail.vue ---------------------------------------------------------------------- diff --git a/empire-db-examples/empire-db-example-vue/src/main/vue/src/pages/employeeDetail.vue b/empire-db-examples/empire-db-example-vue/src/main/vue/src/pages/employeeDetail.vue index edbe9b8..f550c5b 100644 --- a/empire-db-examples/empire-db-example-vue/src/main/vue/src/pages/employeeDetail.vue +++ b/empire-db-examples/empire-db-example-vue/src/main/vue/src/pages/employeeDetail.vue @@ -90,33 +90,30 @@ EMPAPI.debug('create employee record') EMPAPI.createEmployeeRecord(this.employeeId) .done(response => (this.onLoadDone(response))) - /* - .fail(() => this.$router.push('/login')) - */ + .fail(response => (this.$parent.handleError(response, '/employeeList'))) }, loadDetails: function () { EMPAPI.debug('load employee record') EMPAPI.readEmployeeRecord(this.employeeId) .done(response => (this.onLoadDone(response))) - /* - .fail(() => this.$router.push('/login')) - */ + .fail(response => (this.$parent.handleError(response, '/employeeList'))) }, doSave: function (event) { + this.$parent.clearMessages() EMPAPI.debug('load employee record') EMPAPI.updateEmployee(this.employeeRecord.data) .done(response => (this.onUpdateDone(response))) + .fail(response => (this.$parent.handleError(response))) }, doDelete: function (event) { if (!confirm('Do you really want to delete this employee?')) { return } + this.$parent.clearMessages() EMPAPI.debug('load employee record') EMPAPI.deleteEmployee(this.employeeId) .done(response => (this.onUpdateDone(response))) - /* - .fail(() => this.$router.push('/login')) - */ + .fail(response => (this.$parent.handleError(response, '/employeeList'))) }, doReturnToList: function (event) { this.$router.push('/employeeList') http://git-wip-us.apache.org/repos/asf/empire-db/blob/f9a7d109/empire-db-examples/empire-db-example-vue/src/main/vue/src/pages/employeeList.vue ---------------------------------------------------------------------- diff --git a/empire-db-examples/empire-db-example-vue/src/main/vue/src/pages/employeeList.vue b/empire-db-examples/empire-db-example-vue/src/main/vue/src/pages/employeeList.vue index 4e08f8c..1b098d3 100644 --- a/empire-db-examples/empire-db-example-vue/src/main/vue/src/pages/employeeList.vue +++ b/empire-db-examples/empire-db-example-vue/src/main/vue/src/pages/employeeList.vue @@ -101,7 +101,6 @@ import eInput from '../components/e-input' import eLabel from '../components/e-label' import eValue from '../components/e-value' - import app from '../App' // import $ from 'jquery' export default { @@ -112,8 +111,7 @@ eControl, eInput, eLabel, - eValue, - app + eValue }, data () { http://git-wip-us.apache.org/repos/asf/empire-db/blob/f9a7d109/empire-db-examples/empire-db-example-vue/src/main/vue/src/pages/login.vue ---------------------------------------------------------------------- diff --git a/empire-db-examples/empire-db-example-vue/src/main/vue/src/pages/login.vue b/empire-db-examples/empire-db-example-vue/src/main/vue/src/pages/login.vue index f0eb178..493043a 100644 --- a/empire-db-examples/empire-db-example-vue/src/main/vue/src/pages/login.vue +++ b/empire-db-examples/empire-db-example-vue/src/main/vue/src/pages/login.vue @@ -62,13 +62,7 @@ login: function () { EMPAPI.login(this.username, this.password) .done(() => this.$parent.onLoginComplete()) - .fail(function (response) { - var msg = 'Der Dienst ist zur Zeit nicht verfügbar.' - if (response.responseJSON) { - msg = response.responseJSON.error - } - alert(msg) - }) + .fail(response => (this.$parent.handleError(response))) } } }
