Repository: empire-db Updated Branches: refs/heads/master 79b5e5790 -> 878e45c20
http://git-wip-us.apache.org/repos/asf/empire-db/blob/878e45c2/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/vuesample/model/db/SampleDB.java ---------------------------------------------------------------------- diff --git a/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/vuesample/model/db/SampleDB.java b/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/vuesample/model/db/SampleDB.java deleted file mode 100644 index 735d323..0000000 --- a/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/vuesample/model/db/SampleDB.java +++ /dev/null @@ -1,156 +0,0 @@ -/* - * 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.vuesample.model.db; - -import org.apache.empire.commons.Options; -import org.apache.empire.data.DataMode; -import org.apache.empire.data.DataType; -import org.apache.empire.db.DBColumn; -import org.apache.empire.db.DBDatabase; -import org.apache.empire.db.DBTableColumn; - -public class SampleDB extends DBDatabase -{ - private final static long serialVersionUID = 1L; - - // Declare all Tables - public final TDepartments T_DEPARTMENTS = new TDepartments(this); - public final TEmployees T_EMPLOYEES = new TEmployees(this); - - /** - * Constructor SampleDB - */ - public SampleDB() - { - // Define Foreign-Key Relations - addRelation(T_EMPLOYEES.DEPARTMENT_ID.referenceOn(T_DEPARTMENTS.DEPARTMENT_ID)); - } - - // Needed for the DBELResolver - @Override - protected void register(String id) - { - super.register("db"); - } - - /** - * This class represents the definition of the Departments table. - */ - public static class TDepartments extends SampleTable - { - private static final long serialVersionUID = 1L; - - public final DBTableColumn DEPARTMENT_ID; - public final DBTableColumn NAME; - public final DBTableColumn HEAD; - public final DBTableColumn BUSINESS_UNIT; - public final DBTableColumn UPDATE_TIMESTAMP; - - public TDepartments(DBDatabase db) - { - super("DEPARTMENTS", db); - // ID - DEPARTMENT_ID = addColumn("DEPARTMENT_ID", DataType.AUTOINC, 0, DataMode.NotNull, "DEP_ID_SEQUENCE"); - NAME = addColumn("NAME", DataType.TEXT, 80, DataMode.NotNull); - HEAD = addColumn("HEAD", DataType.TEXT, 80, DataMode.Nullable); - BUSINESS_UNIT = addColumn("BUSINESS_UNIT", DataType.TEXT, 4, DataMode.NotNull, "ITTK"); - UPDATE_TIMESTAMP= addColumn("UPDATE_TIMESTAMP", DataType.DATETIME, 0, DataMode.NotNull); - - // Primary Key - setPrimaryKey(DEPARTMENT_ID); - // Set other Indexes - addIndex("DEARTMENT_NAME_IDX", true, new DBColumn[] { NAME }); - // Set timestamp column for save updates - setTimestampColumn(UPDATE_TIMESTAMP); - - } - } - - - - /** - * This class represents the definition of the Employees table. - */ - public static class TEmployees extends SampleTable - { - private static final long serialVersionUID = 1L; - - public final DBTableColumn EMPLOYEE_ID; - public final DBTableColumn SALUTATION; -// public final DBTableColumn PICTURE; - public final DBTableColumn FIRST_NAME; - public final DBTableColumn LAST_NAME; - public final DBTableColumn DATE_OF_BIRTH; - public final DBTableColumn DEPARTMENT_ID; - public final DBTableColumn GENDER; - public final DBTableColumn PHONE_NUMBER; - public final DBTableColumn EMAIL; - public final DBTableColumn RETIRED; - public final DBTableColumn UPDATE_TIMESTAMP; - public TEmployees(DBDatabase db) - { - super("EMPLOYEES", db); - // ID - EMPLOYEE_ID = addColumn("EMPLOYEE_ID", DataType.AUTOINC, 0, DataMode.NotNull, "EMPLOYEE_ID_SEQUENCE"); - SALUTATION = addColumn("SALUTATION", DataType.TEXT, 5, DataMode.Nullable); - FIRST_NAME = addColumn("FIRST_NAME", DataType.TEXT, 40, DataMode.NotNull); - LAST_NAME = addColumn("LAST_NAME", DataType.TEXT, 40, DataMode.NotNull); - DATE_OF_BIRTH = addColumn("DATE_OF_BIRTH", DataType.DATE, 0, DataMode.Nullable); - DEPARTMENT_ID = addColumn("DEPARTMENT_ID", DataType.INTEGER, 0, DataMode.NotNull); - GENDER = addColumn("GENDER", DataType.TEXT, 1, DataMode.Nullable); - PHONE_NUMBER = addColumn("PHONE_NUMBER", DataType.TEXT, 40, DataMode.Nullable); - EMAIL = addColumn("EMAIL", DataType.TEXT, 80, DataMode.Nullable); - RETIRED = addColumn("RETIRED", DataType.BOOL, 0, DataMode.NotNull, false); - // PICTURE = addColumn("PICTURE", DataType.BLOB, 0, DataMode.Nullable); - UPDATE_TIMESTAMP= addColumn("UPDATE_TIMESTAMP", DataType.DATETIME, 0, DataMode.NotNull); - - // Primary Key - setPrimaryKey(EMPLOYEE_ID); - // Set other Indexes - addIndex("PERSON_NAME_IDX", true, new DBColumn[] { FIRST_NAME, LAST_NAME, DATE_OF_BIRTH }); - - // Set timestamp column for save updates - setTimestampColumn(UPDATE_TIMESTAMP); - - // Create Options for GENDER column - Options genders = new Options(); - genders.set("M", "!option.employee.gender.male"); - genders.set("F", "!option.employee.gender.female"); - GENDER.setOptions(genders); - GENDER.setControlType("select"); - - Options retired = new Options(); - retired.set(false, "!option.employee.active"); - retired.set(true, "!option.employee.retired"); - RETIRED.setOptions(retired); - RETIRED.setControlType("checkbox"); - - // Set special control types - DEPARTMENT_ID.setControlType("select"); - PHONE_NUMBER .setControlType("phone"); - - // Set optional formatting attributes - DATE_OF_BIRTH.setAttribute("format:date", "yyyy-MM-dd"); - - // PICTURE.setControlType("blob"); - - } - } - -} http://git-wip-us.apache.org/repos/asf/empire-db/blob/878e45c2/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/vuesample/model/db/SampleTable.java ---------------------------------------------------------------------- diff --git a/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/vuesample/model/db/SampleTable.java b/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/vuesample/model/db/SampleTable.java deleted file mode 100644 index 353bf75..0000000 --- a/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/vuesample/model/db/SampleTable.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * 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.vuesample.model.db; - -import java.util.Locale; - -import org.apache.empire.data.DataType; -import org.apache.empire.db.DBDatabase; -import org.apache.empire.db.DBTable; -import org.apache.empire.db.DBTableColumn; - -/** - * Base class definition for all database tables Automatically generates a message-key for the field title e.g. for the column - * EMPLOYEES.DATE_OF_BIRTH it generates the key "!field.title.employees.dateOfBirth"; - */ -public class SampleTable extends DBTable -{ - private final static long serialVersionUID = 1L; - public final String MESSAGE_KEY_PREFIX = "!field.title."; - - public SampleTable(String name, DBDatabase db) - { - super(name, db); - } - - @Override - protected void addColumn(DBTableColumn column) - { - // Set Translation Title - String col = column.getBeanPropertyName(); - String tbl = getName().toLowerCase(); - String key = MESSAGE_KEY_PREFIX + tbl + "." + col; - column.setTitle(key); - - // Set Default Control Type - DataType type = column.getDataType(); - column.setControlType((type == DataType.BOOL) ? "checkbox" : "text"); - - // Add Column - super.addColumn(column); - } - - public enum LanguageIndex { - DE(Locale.GERMAN), - - EN(Locale.ENGLISH); - - private final Locale locale; - - private LanguageIndex(Locale locale) - { - this.locale = locale; - } - - public Locale getLocale() - { - return this.locale; - } - - public String getDBLangKey() - { - return this.name().toUpperCase(); - } - } -} http://git-wip-us.apache.org/repos/asf/empire-db/blob/878e45c2/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 0a3a441..147da75 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 @@ -93,6 +93,7 @@ div.formPanel { } table.inputForm { width: 100%; + table-layout: fixed; } table.inputForm td.eCtlLabel { vertical-align:top; @@ -176,6 +177,11 @@ span.eInpDis { padding-left: 4px; font-style: bold; } +.eInpWrap { +} +.eInput { + width: 100%; +} .eInputHint { padding-left: 4px; font-style: italic; http://git-wip-us.apache.org/repos/asf/empire-db/blob/878e45c2/empire-db-examples/empire-db-example-vue/src/main/vue/src/components/e-input.vue ---------------------------------------------------------------------- diff --git a/empire-db-examples/empire-db-example-vue/src/main/vue/src/components/e-input.vue b/empire-db-examples/empire-db-example-vue/src/main/vue/src/components/e-input.vue index 3ef9caa..fadc680 100644 --- a/empire-db-examples/empire-db-example-vue/src/main/vue/src/components/e-input.vue +++ b/empire-db-examples/empire-db-example-vue/src/main/vue/src/components/e-input.vue @@ -14,7 +14,21 @@ License. --> <template> - <input :id="'CTL_' + column" name="FIRST_NAME" class="eInput eTypeText" lang="en" type="text" maxlength="40" :value="data[column.property]" @input="updateValue($event)"> + <div class="eInpWrap"> + <template v-if="column.options"> + <select :id="'CTL_' + column.name" :name="column.name" class="eInput eTypeSelect" @change="updateValue($event)"> + <template v-if="column.required === false && column.options[''] === undefined"> + <option value="" :selected="inputValue === null"></option> + </template> + <template v-for="(value, key) in column.options"> + <option :value="key" :selected="inputValue === key">{{value}}</option> + </template> + </select> + </template> + <template v-else> + <input :id="'CTL_' + column.name" :name="column.name" class="eInput eTypeText" lang="en" type="text" :maxlength="column.maxLength" :value="inputValue" @input="updateValue($event)"> + </template> + </div> </template> <script> import EMPAPI from '../api/emp-api' @@ -32,6 +46,12 @@ } }, + computed: { + inputValue: function () { + return this.data[this.column.property] + } + }, + created: function () { // alert('column=' + this.column.name + ' is ' + this.data[this.column.property]) }, http://git-wip-us.apache.org/repos/asf/empire-db/blob/878e45c2/empire-db-examples/empire-db-example-vue/src/main/vue/src/components/e-value.vue ---------------------------------------------------------------------- diff --git a/empire-db-examples/empire-db-example-vue/src/main/vue/src/components/e-value.vue b/empire-db-examples/empire-db-example-vue/src/main/vue/src/components/e-value.vue new file mode 100644 index 0000000..9ecb56e --- /dev/null +++ b/empire-db-examples/empire-db-example-vue/src/main/vue/src/components/e-value.vue @@ -0,0 +1,40 @@ +<!-- + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version + 2.0 (the "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 Unless required by + applicable law or agreed to in writing, software distributed under the + License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR + CONDITIONS OF ANY KIND, either express or implied. See the License for + the specific language governing permissions and limitations under the + License. + --> +<script> + // import $ from 'jquery' + export default { + functional: true, + name: 'e-value', + + props: { + column: { + required: true + }, + data: { + required: true + } + }, + render (createElement, context) { + var value = context.props.data[context.props.column.property] + if (context.props.column.options) { + value = context.props.column.options[value] + } + const text = createElement('span', null, value) + return text + } + + } +</script> http://git-wip-us.apache.org/repos/asf/empire-db/blob/878e45c2/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 81abf23..616e0d2 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 @@ -18,25 +18,25 @@ <h1>Employee-Details for {{employeeId}}</h1> - <!-- - <div class="rdp-weeknavbar"> - <button class="rdp-button" @click="showPlan($event)">Zurück</button> - </div> - - <div class="rdp-weekinfo"> - Hinweise für Bezirk <strong>{{info.bereich.kurz}}</strong> ({{info.bereich.name}}) - <br/>am <strong>{{info.tag.datumLang}}</strong> - </div> - - <rdp-hints :hints="info.hinweise"></rdp-hints> - - <div class="rdp-weeknavbar"> - <button class="rdp-button" @click="showPlan($event)">Zurück</button> - </div> - --> + <table class="inputForm" v-if="record" style="width:400px"> + <colgroup> + <col width="120px"/> + <col/> + </colgroup> + <tr><e-control :data="record.data" :column="record.meta.salutation" /></tr> + <tr><e-control :data="record.data" :column="record.meta.firstName" /></tr> + <tr><e-control :data="record.data" :column="record.meta.lastName" /></tr> + <tr><e-control :data="record.data" :column="record.meta.dateOfBirth" format="[yyyy-MM-dd]"/></tr> + <tr><e-control :data="record.data" :column="record.meta.departmentId" /></tr> + <tr><e-control :data="record.data" :column="record.meta.gender" /> </tr> + <tr><e-control :data="record.data" :column="record.meta.phoneNumber" /></tr> + <tr><e-control :data="record.data" :column="record.meta.email" /></tr> + <tr><e-control :data="record.data" :column="record.meta.retired" /></tr> + </table> <div class="rdp-weeknavbar"> <button class="rdp-button" @click="showList($event)">Back</button> + <button @click="saveChanges($event)">Save</button> </div> </div> @@ -44,11 +44,13 @@ <script> import EMPAPI from '../api/emp-api' + import eControl from '../components/e-control.vue' export default { name: 'details', components: { + eControl }, data () { @@ -77,6 +79,14 @@ .fail(() => this.$router.push('/login')) */ }, + saveChanges: function (event) { + EMPAPI.debug('load employee record') + EMPAPI.updateEmployee(this.record.data) + .done(response => (this.setResult(response))) + }, + setResult (result) { + alert('Save OK!') + }, showList: function (event) { this.$router.push('/employeeList') } http://git-wip-us.apache.org/repos/asf/empire-db/blob/878e45c2/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 aa1300f..03f4098 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 @@ -30,10 +30,8 @@ <e-control :column="filter.meta.lastName" :data="filter.data"/> </tr> <tr> - <td class="eCtlLabel"><label class="eLabel" for="DEPARTMENT_ID">Department:</label></td> - <td class="eCtlInput"><select name="DEPARTMENT_ID" class="eInput eTypeNumber" id="DEPARTMENT_ID" size="1"> <option selected="selected" value=""></option> <option value="1">Procurement</option> <option value="2">Development</option> <option value="3">Sales</option></select></td> - <td class="eCtlLabel"><label class="eLabel" for="GENDER">Gender:</label></td> - <td class="eCtlInput"><select name="GENDER" class="eInput eTypeText" id="GENDER" size="1"> <option selected="selected" value=""></option> <option value="M">Male</option> <option value="F">Female</option></select></td> + <e-control :column="filter.meta.departmentId" :data="filter.data"/> + <e-control :column="filter.meta.gender" :data="filter.data"/> </tr> <tr> <td class="eCtlLabel"><label class="eLabel" for="DEPARTMENT_ID">Info:</label></td> @@ -87,9 +85,9 @@ </router-link> </td> <td>{{item.department}}</td> - <td>{{item.gender}}</td> - <td>{{item.dateOfBirth}}</td> - <td>?</td> + <td><e-value :column="employeeList.meta.gender" :data="item"/></td> + <td><e-value :column="employeeList.meta.dateOfBirth" :data="item"/></td> + <td><e-value :column="employeeList.meta.retired" :data="item"/></td> </tr> </template> </tbody> @@ -121,14 +119,18 @@ import EMPAPI from '../api/emp-api' import eControl from '../components/e-control.vue' import eInput from '../components/e-input' +// import eLabel from '../components/e-label' + import eValue from '../components/e-value' import $ from 'jquery' export default { name: 'list', components: { + eControl, eInput, - eControl +// eLabel, + eValue }, data () { http://git-wip-us.apache.org/repos/asf/empire-db/blob/878e45c2/empire-db-examples/empire-db-example-vue/src/main/webapp/WEB-INF/web.xml ---------------------------------------------------------------------- diff --git a/empire-db-examples/empire-db-example-vue/src/main/webapp/WEB-INF/web.xml b/empire-db-examples/empire-db-example-vue/src/main/webapp/WEB-INF/web.xml index 91670f0..496889c 100644 --- a/empire-db-examples/empire-db-example-vue/src/main/webapp/WEB-INF/web.xml +++ b/empire-db-examples/empire-db-example-vue/src/main/webapp/WEB-INF/web.xml @@ -37,7 +37,7 @@ --> <listener> - <listener-class>org.apache.empire.rest.service.listener.AppListener</listener-class> + <listener-class>org.apache.empire.rest.app.SampleServiceApp$ContextListener</listener-class> </listener> </web-app> \ No newline at end of file
