commit dbd215c9ffff9c40c4b9941485c5b2f77bdeaa53 Author: Janserik Suinbai Date: Sun Mar 15 08:33:05 2026 -0500 Initial commit diff --git a/kz_cafe_admin/.classpath b/kz_cafe_admin/.classpath new file mode 100644 index 0000000..2337293 --- /dev/null +++ b/kz_cafe_admin/.classpath @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kz_cafe_admin/.project b/kz_cafe_admin/.project new file mode 100644 index 0000000..171bcef --- /dev/null +++ b/kz_cafe_admin/.project @@ -0,0 +1,48 @@ + + + kz_cafe_admin + + + kz_cafe_core + + + + org.eclipse.wst.jsdt.core.javascriptValidator + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.wst.common.project.facet.core.builder + + + + + org.eclipse.wst.validation.validationbuilder + + + + + com.vaadin.integration.eclipse.widgetsetBuilder + + + + + com.vaadin.integration.eclipse.addonStylesBuilder + + + + + + org.eclipse.jem.workbench.JavaEMFNature + org.eclipse.wst.common.modulecore.ModuleCoreNature + org.eclipse.wst.common.project.facet.core.nature + org.eclipse.jdt.core.javanature + org.eclipse.wst.jsdt.core.jsNature + com.vaadin.integration.eclipse.widgetsetNature + + diff --git a/kz_cafe_admin/.settings/.jsdtscope b/kz_cafe_admin/.settings/.jsdtscope new file mode 100644 index 0000000..887f573 --- /dev/null +++ b/kz_cafe_admin/.settings/.jsdtscope @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/kz_cafe_admin/.settings/com.vaadin.integration.eclipse.prefs b/kz_cafe_admin/.settings/com.vaadin.integration.eclipse.prefs new file mode 100644 index 0000000..08beadd --- /dev/null +++ b/kz_cafe_admin/.settings/com.vaadin.integration.eclipse.prefs @@ -0,0 +1,7 @@ +com.vaadin.integration.eclipse.useLatestNightly=false +com.vaadin.integration.eclipse.widgetsetBuildsSuspended=false +com.vaadin.integration.eclipse.widgetsetCompilationEta=64294 +com.vaadin.integration.eclipse.widgetsetDirty=false +com.vaadin.integration.eclipse.widgetsetStyle=PRETTY +com.vaadin.integration.eclipse.widgetsetVerbose=true +eclipse.preferences.version=1 diff --git a/kz_cafe_admin/.settings/org.eclipse.jdt.core.prefs b/kz_cafe_admin/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..838bd9d --- /dev/null +++ b/kz_cafe_admin/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,11 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.7 diff --git a/kz_cafe_admin/.settings/org.eclipse.wst.common.component b/kz_cafe_admin/.settings/org.eclipse.wst.common.component new file mode 100644 index 0000000..c0073f8 --- /dev/null +++ b/kz_cafe_admin/.settings/org.eclipse.wst.common.component @@ -0,0 +1,50 @@ + + + + + + uses + + + uses + + + uses + + + uses + + + uses + + + uses + + + uses + + + uses + + + uses + + + uses + + + uses + + + uses + + + uses + + + uses + + + + + diff --git a/kz_cafe_admin/.settings/org.eclipse.wst.common.project.facet.core.xml b/kz_cafe_admin/.settings/org.eclipse.wst.common.project.facet.core.xml new file mode 100644 index 0000000..a7c3cbf --- /dev/null +++ b/kz_cafe_admin/.settings/org.eclipse.wst.common.project.facet.core.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/kz_cafe_admin/.settings/org.eclipse.wst.jsdt.ui.superType.container b/kz_cafe_admin/.settings/org.eclipse.wst.jsdt.ui.superType.container new file mode 100644 index 0000000..3bd5d0a --- /dev/null +++ b/kz_cafe_admin/.settings/org.eclipse.wst.jsdt.ui.superType.container @@ -0,0 +1 @@ +org.eclipse.wst.jsdt.launching.baseBrowserLibrary \ No newline at end of file diff --git a/kz_cafe_admin/.settings/org.eclipse.wst.jsdt.ui.superType.name b/kz_cafe_admin/.settings/org.eclipse.wst.jsdt.ui.superType.name new file mode 100644 index 0000000..05bd71b --- /dev/null +++ b/kz_cafe_admin/.settings/org.eclipse.wst.jsdt.ui.superType.name @@ -0,0 +1 @@ +Window \ No newline at end of file diff --git a/kz_cafe_admin/WebContent/META-INF/MANIFEST.MF b/kz_cafe_admin/WebContent/META-INF/MANIFEST.MF new file mode 100644 index 0000000..5e94951 --- /dev/null +++ b/kz_cafe_admin/WebContent/META-INF/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Class-Path: + diff --git a/kz_cafe_admin/WebContent/VAADIN/custom.js b/kz_cafe_admin/WebContent/VAADIN/custom.js new file mode 100644 index 0000000..a2e0f99 --- /dev/null +++ b/kz_cafe_admin/WebContent/VAADIN/custom.js @@ -0,0 +1,21 @@ +function __drawImage(img){ + foto1= new Image(); + foto1.src=(img); + Controlla(img); +} +function Controlla(img){ + if((foto1.width!=0)&&(foto1.height!=0)){ + __viewFoto(img); + } + else{ + funzione="Controlla('"+img+"')"; + intervallo=setTimeout(funzione,20); + } +} +function __viewFoto(img){ + largh=foto1.width+20; + altez=foto1.height+20; + stringa="width="+largh+",height="+altez; + finestra=window.open(img,"",stringa); +} + diff --git a/kz_cafe_admin/WebContent/VAADIN/themes/custom/---.png b/kz_cafe_admin/WebContent/VAADIN/themes/custom/---.png new file mode 100644 index 0000000..5a65932 Binary files /dev/null and b/kz_cafe_admin/WebContent/VAADIN/themes/custom/---.png differ diff --git a/kz_cafe_admin/WebContent/VAADIN/themes/custom/asc1.png b/kz_cafe_admin/WebContent/VAADIN/themes/custom/asc1.png new file mode 100644 index 0000000..900cbe7 Binary files /dev/null and b/kz_cafe_admin/WebContent/VAADIN/themes/custom/asc1.png differ diff --git a/kz_cafe_admin/WebContent/VAADIN/themes/custom/dollar1.png b/kz_cafe_admin/WebContent/VAADIN/themes/custom/dollar1.png new file mode 100644 index 0000000..06e0650 Binary files /dev/null and b/kz_cafe_admin/WebContent/VAADIN/themes/custom/dollar1.png differ diff --git a/kz_cafe_admin/WebContent/VAADIN/themes/custom/dollar1_large.png b/kz_cafe_admin/WebContent/VAADIN/themes/custom/dollar1_large.png new file mode 100644 index 0000000..1b52765 Binary files /dev/null and b/kz_cafe_admin/WebContent/VAADIN/themes/custom/dollar1_large.png differ diff --git a/kz_cafe_admin/WebContent/VAADIN/themes/custom/dollar2.png b/kz_cafe_admin/WebContent/VAADIN/themes/custom/dollar2.png new file mode 100644 index 0000000..b089416 Binary files /dev/null and b/kz_cafe_admin/WebContent/VAADIN/themes/custom/dollar2.png differ diff --git a/kz_cafe_admin/WebContent/VAADIN/themes/custom/dollar2_large.png b/kz_cafe_admin/WebContent/VAADIN/themes/custom/dollar2_large.png new file mode 100644 index 0000000..0db7723 Binary files /dev/null and b/kz_cafe_admin/WebContent/VAADIN/themes/custom/dollar2_large.png differ diff --git a/kz_cafe_admin/WebContent/VAADIN/themes/custom/dollar3.png b/kz_cafe_admin/WebContent/VAADIN/themes/custom/dollar3.png new file mode 100644 index 0000000..8cb6f4f Binary files /dev/null and b/kz_cafe_admin/WebContent/VAADIN/themes/custom/dollar3.png differ diff --git a/kz_cafe_admin/WebContent/VAADIN/themes/custom/dollar3_large.png b/kz_cafe_admin/WebContent/VAADIN/themes/custom/dollar3_large.png new file mode 100644 index 0000000..c01640d Binary files /dev/null and b/kz_cafe_admin/WebContent/VAADIN/themes/custom/dollar3_large.png differ diff --git a/kz_cafe_admin/WebContent/VAADIN/themes/custom/dsc1.png b/kz_cafe_admin/WebContent/VAADIN/themes/custom/dsc1.png new file mode 100644 index 0000000..4ac2554 Binary files /dev/null and b/kz_cafe_admin/WebContent/VAADIN/themes/custom/dsc1.png differ diff --git a/kz_cafe_admin/WebContent/VAADIN/themes/custom/enter.png b/kz_cafe_admin/WebContent/VAADIN/themes/custom/enter.png new file mode 100644 index 0000000..b27c16b Binary files /dev/null and b/kz_cafe_admin/WebContent/VAADIN/themes/custom/enter.png differ diff --git a/kz_cafe_admin/WebContent/VAADIN/themes/custom/logo.png b/kz_cafe_admin/WebContent/VAADIN/themes/custom/logo.png new file mode 100644 index 0000000..f6d3486 Binary files /dev/null and b/kz_cafe_admin/WebContent/VAADIN/themes/custom/logo.png differ diff --git a/kz_cafe_admin/WebContent/VAADIN/themes/custom/star.png b/kz_cafe_admin/WebContent/VAADIN/themes/custom/star.png new file mode 100644 index 0000000..c293ba8 Binary files /dev/null and b/kz_cafe_admin/WebContent/VAADIN/themes/custom/star.png differ diff --git a/kz_cafe_admin/WebContent/VAADIN/themes/custom/star1.png b/kz_cafe_admin/WebContent/VAADIN/themes/custom/star1.png new file mode 100644 index 0000000..38340f2 Binary files /dev/null and b/kz_cafe_admin/WebContent/VAADIN/themes/custom/star1.png differ diff --git a/kz_cafe_admin/WebContent/VAADIN/themes/custom/star2.png b/kz_cafe_admin/WebContent/VAADIN/themes/custom/star2.png new file mode 100644 index 0000000..34c0cca Binary files /dev/null and b/kz_cafe_admin/WebContent/VAADIN/themes/custom/star2.png differ diff --git a/kz_cafe_admin/WebContent/VAADIN/themes/custom/star3.png b/kz_cafe_admin/WebContent/VAADIN/themes/custom/star3.png new file mode 100644 index 0000000..d974d12 Binary files /dev/null and b/kz_cafe_admin/WebContent/VAADIN/themes/custom/star3.png differ diff --git a/kz_cafe_admin/WebContent/VAADIN/themes/custom/star4.png b/kz_cafe_admin/WebContent/VAADIN/themes/custom/star4.png new file mode 100644 index 0000000..5799af1 Binary files /dev/null and b/kz_cafe_admin/WebContent/VAADIN/themes/custom/star4.png differ diff --git a/kz_cafe_admin/WebContent/VAADIN/themes/custom/star5.png b/kz_cafe_admin/WebContent/VAADIN/themes/custom/star5.png new file mode 100644 index 0000000..ed93fc6 Binary files /dev/null and b/kz_cafe_admin/WebContent/VAADIN/themes/custom/star5.png differ diff --git a/kz_cafe_admin/WebContent/VAADIN/themes/custom/styles.css b/kz_cafe_admin/WebContent/VAADIN/themes/custom/styles.css new file mode 100644 index 0000000..97b2a8a --- /dev/null +++ b/kz_cafe_admin/WebContent/VAADIN/themes/custom/styles.css @@ -0,0 +1,241 @@ +@import url(../reindeer/styles.css); + + +.v-table-cell-wrapper { + white-space: normal; +} + +.v-button-link .v-button-caption{ + color: #D36060; + font-size: 12px; + font-weight: normal; + line-height: inherit; + text-shadow: none; +} + + +.v-nativebutton-link .v-nativebutton-caption{ + color: #D36060; + font-size: 12px; + font-weight: normal; + line-height: inherit; + text-shadow: none; +} + + + + +.v-panel-content > div { +# background: transparent; +} + +.v-panel-content { +# background-color: #F8F2D8; +} + + + +.v-textfield{ + background-color: #FFF8EA; +} + +.v-window{ +# background-color: #F8F2D8; +} + + +#.v-textarea { +# resize: none; +#} + +.no-textarea-resize{ + resize: none; +} + + + +.panel-header{ + background-color: #F8F2D8; +} + + +.v-selected .v-table-cell-content .v-table-cell-wrapper .v-button-link .v-button-caption, .v-nativebutton-link .v-nativebutton-caption{ + color: #E41B23; + font-color: #E41B23; +} + +#.v-filterselect .v-icon{ +# width:50px; +# height:16px; +#} + + +#.v-table-row, .v-table-row-odd { +# height: 24px; +#} + + + +/* Grid with grid! */ +.v-gridlayout-grid { +margin: 0px; +padding: 0px; +border: 1px solid gray; +} + +.v-gridlayout-grid > div { +margin: 0px; +padding: 0px; +border: 0px solid gray; +} + +.v-gridlayout-grid > div > div { +margin: 0px; +padding: 0px; +border: 0px solid gray; +} + +.v-gridlayout-grid > div > div > div { +margin: 0px; +padding: 0px; +border: 1px solid gray; +} + + + +.v-menubar { +#text-align: center; +#background: transparent; +#border: none; +#color: white; +#text-shadow: none; +font-size: 14px; +font-weight:bold +} + + +.v-table tr.v-selected { + background: #FFDDDD; + color: #000000; + text-shadow: none; +} + + + +.v-table-body.focused{ + border-color: #999999; +} + + +.v-table-focus .v-table-cell-content{ +# border-style: solid; + border-color: #E41B23; +} + + +.v-table-focus{ + border-color: #E41B23; +} + + +.v-table .v-selected .v-table-cell-content { + border-right-color: #FF9999; +} + +.v-textfield-focus .v-textfield-content{ + border-color: #E41B23; +} + +.v-window-outerheader{ + background: #D40B13; +} +.v-window-header{ + background: #D40B13; +} +.v-window-closebox{ +# background: #E41B23; +} + + + + + + +.v-table-row.v-selected.v-table-focus{ +# color: #FF0000; +# font-color: #FF0000; +} + +//.v-table-row-odd.v-selected.v-table-focus{ +// color: #00FF00; +// font-color: #00FF00; +//} + + +.mybarmenu .v-menubar-menuitem-selected{ + background: #666666; +# color: #000000; +} + + +.v-menubar-submenu .v-menubar-menuitem-selected{ + background: #D3D3D3; + color: #000000; + text-shadow: none; +} + + + + +.v-table-row-highlight-blocked{ + color: #E41B23; + font-weight: bold; +} + + + +.v-table-row-highlight-stressed{ + font-weight: bold; + font-size: 12px; +} +.v-table-row-highlight-stressed .v-table-cell-content .v-table-cell-wrapper .v-button-link .v-button-caption{ + color: #E41B23; + font-weight: bold; + font-size: 12px; +} + + +.v-table-row-highlight-gray{ + color: #999999; + font-weight: normal; + font-size: 12px; +} +.v-table-row-highlight-gray .v-table-cell-content .v-table-cell-wrapper .v-button-link .v-button-caption{ + color: #999999; + font-weight: normal; + font-size: 12px; +} + + + + + + +.red-background{ + background-color: #E41B23; +} + +.top-menu-current-item{ + font-size: 18px; + font-weight: bold; + color: #F0CAA6; + padding-left: 20px; + #padding-right: 20px; + padding-top: 18px; + #text-decoration: underline; + white-space: nowrap; + #font-family: Serif; + font-style:italic; +} + + diff --git a/kz_cafe_admin/WebContent/VAADIN/widgetsets/kz.cafe.admin.widgetset.Kz_cafe_adminWidgetset/0A9476898799A150D840F0B1C3672921.cache.png b/kz_cafe_admin/WebContent/VAADIN/widgetsets/kz.cafe.admin.widgetset.Kz_cafe_adminWidgetset/0A9476898799A150D840F0B1C3672921.cache.png new file mode 100644 index 0000000..08671ce Binary files /dev/null and b/kz_cafe_admin/WebContent/VAADIN/widgetsets/kz.cafe.admin.widgetset.Kz_cafe_adminWidgetset/0A9476898799A150D840F0B1C3672921.cache.png differ diff --git a/kz_cafe_admin/WebContent/VAADIN/widgetsets/kz.cafe.admin.widgetset.Kz_cafe_adminWidgetset/0E4A90236CF270CEB092DA3A0C04EE42.cache.html b/kz_cafe_admin/WebContent/VAADIN/widgetsets/kz.cafe.admin.widgetset.Kz_cafe_adminWidgetset/0E4A90236CF270CEB092DA3A0C04EE42.cache.html new file mode 100644 index 0000000..9b14162 --- /dev/null +++ b/kz_cafe_admin/WebContent/VAADIN/widgetsets/kz.cafe.admin.widgetset.Kz_cafe_adminWidgetset/0E4A90236CF270CEB092DA3A0C04EE42.cache.html @@ -0,0 +1,43371 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kz_cafe_admin/WebContent/VAADIN/widgetsets/kz.cafe.admin.widgetset.Kz_cafe_adminWidgetset/18D9478B3B91AE53C32DCF36A0BFDE68.cache.html b/kz_cafe_admin/WebContent/VAADIN/widgetsets/kz.cafe.admin.widgetset.Kz_cafe_adminWidgetset/18D9478B3B91AE53C32DCF36A0BFDE68.cache.html new file mode 100644 index 0000000..f3f4f3e --- /dev/null +++ b/kz_cafe_admin/WebContent/VAADIN/widgetsets/kz.cafe.admin.widgetset.Kz_cafe_adminWidgetset/18D9478B3B91AE53C32DCF36A0BFDE68.cache.html @@ -0,0 +1,42959 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kz_cafe_admin/WebContent/VAADIN/widgetsets/kz.cafe.admin.widgetset.Kz_cafe_adminWidgetset/1B658A655FB4B9D48567BF6D69C5502D.cache.html b/kz_cafe_admin/WebContent/VAADIN/widgetsets/kz.cafe.admin.widgetset.Kz_cafe_adminWidgetset/1B658A655FB4B9D48567BF6D69C5502D.cache.html new file mode 100644 index 0000000..870424d --- /dev/null +++ b/kz_cafe_admin/WebContent/VAADIN/widgetsets/kz.cafe.admin.widgetset.Kz_cafe_adminWidgetset/1B658A655FB4B9D48567BF6D69C5502D.cache.html @@ -0,0 +1,43463 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kz_cafe_admin/WebContent/VAADIN/widgetsets/kz.cafe.admin.widgetset.Kz_cafe_adminWidgetset/22043636B226340D240C4CAD1783D712.cache.html b/kz_cafe_admin/WebContent/VAADIN/widgetsets/kz.cafe.admin.widgetset.Kz_cafe_adminWidgetset/22043636B226340D240C4CAD1783D712.cache.html new file mode 100644 index 0000000..bc37208 --- /dev/null +++ b/kz_cafe_admin/WebContent/VAADIN/widgetsets/kz.cafe.admin.widgetset.Kz_cafe_adminWidgetset/22043636B226340D240C4CAD1783D712.cache.html @@ -0,0 +1,43426 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kz_cafe_admin/WebContent/VAADIN/widgetsets/kz.cafe.admin.widgetset.Kz_cafe_adminWidgetset/396F806CD63ABD414BFBB9D57429F05B.cache.png b/kz_cafe_admin/WebContent/VAADIN/widgetsets/kz.cafe.admin.widgetset.Kz_cafe_adminWidgetset/396F806CD63ABD414BFBB9D57429F05B.cache.png new file mode 100644 index 0000000..009e987 Binary files /dev/null and b/kz_cafe_admin/WebContent/VAADIN/widgetsets/kz.cafe.admin.widgetset.Kz_cafe_adminWidgetset/396F806CD63ABD414BFBB9D57429F05B.cache.png differ diff --git a/kz_cafe_admin/WebContent/VAADIN/widgetsets/kz.cafe.admin.widgetset.Kz_cafe_adminWidgetset/85E795F03A349749527204C03B5B7931.cache.html b/kz_cafe_admin/WebContent/VAADIN/widgetsets/kz.cafe.admin.widgetset.Kz_cafe_adminWidgetset/85E795F03A349749527204C03B5B7931.cache.html new file mode 100644 index 0000000..17e6014 --- /dev/null +++ b/kz_cafe_admin/WebContent/VAADIN/widgetsets/kz.cafe.admin.widgetset.Kz_cafe_adminWidgetset/85E795F03A349749527204C03B5B7931.cache.html @@ -0,0 +1,43341 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kz_cafe_admin/WebContent/VAADIN/widgetsets/kz.cafe.admin.widgetset.Kz_cafe_adminWidgetset/DE709C1CAB0F65BCC5BEF11EDA73A925.cache.png b/kz_cafe_admin/WebContent/VAADIN/widgetsets/kz.cafe.admin.widgetset.Kz_cafe_adminWidgetset/DE709C1CAB0F65BCC5BEF11EDA73A925.cache.png new file mode 100644 index 0000000..5a58007 Binary files /dev/null and b/kz_cafe_admin/WebContent/VAADIN/widgetsets/kz.cafe.admin.widgetset.Kz_cafe_adminWidgetset/DE709C1CAB0F65BCC5BEF11EDA73A925.cache.png differ diff --git a/kz_cafe_admin/WebContent/VAADIN/widgetsets/kz.cafe.admin.widgetset.Kz_cafe_adminWidgetset/DF7764EEC1903CD03C9545B354D8D8E4.cache.png b/kz_cafe_admin/WebContent/VAADIN/widgetsets/kz.cafe.admin.widgetset.Kz_cafe_adminWidgetset/DF7764EEC1903CD03C9545B354D8D8E4.cache.png new file mode 100644 index 0000000..fbae947 Binary files /dev/null and b/kz_cafe_admin/WebContent/VAADIN/widgetsets/kz.cafe.admin.widgetset.Kz_cafe_adminWidgetset/DF7764EEC1903CD03C9545B354D8D8E4.cache.png differ diff --git a/kz_cafe_admin/WebContent/VAADIN/widgetsets/kz.cafe.admin.widgetset.Kz_cafe_adminWidgetset/E44767377485D18D6B6864F65BA8EF73.cache.png b/kz_cafe_admin/WebContent/VAADIN/widgetsets/kz.cafe.admin.widgetset.Kz_cafe_adminWidgetset/E44767377485D18D6B6864F65BA8EF73.cache.png new file mode 100644 index 0000000..030ffab Binary files /dev/null and b/kz_cafe_admin/WebContent/VAADIN/widgetsets/kz.cafe.admin.widgetset.Kz_cafe_adminWidgetset/E44767377485D18D6B6864F65BA8EF73.cache.png differ diff --git a/kz_cafe_admin/WebContent/VAADIN/widgetsets/kz.cafe.admin.widgetset.Kz_cafe_adminWidgetset/E8DDCCF0BA295C565F623570519B1CF1.cache.html b/kz_cafe_admin/WebContent/VAADIN/widgetsets/kz.cafe.admin.widgetset.Kz_cafe_adminWidgetset/E8DDCCF0BA295C565F623570519B1CF1.cache.html new file mode 100644 index 0000000..cf12e78 --- /dev/null +++ b/kz_cafe_admin/WebContent/VAADIN/widgetsets/kz.cafe.admin.widgetset.Kz_cafe_adminWidgetset/E8DDCCF0BA295C565F623570519B1CF1.cache.html @@ -0,0 +1,42964 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kz_cafe_admin/WebContent/VAADIN/widgetsets/kz.cafe.admin.widgetset.Kz_cafe_adminWidgetset/EDC7827FEEA59EE44AD790B1C6430C45.cache.png b/kz_cafe_admin/WebContent/VAADIN/widgetsets/kz.cafe.admin.widgetset.Kz_cafe_adminWidgetset/EDC7827FEEA59EE44AD790B1C6430C45.cache.png new file mode 100644 index 0000000..714cbb1 Binary files /dev/null and b/kz_cafe_admin/WebContent/VAADIN/widgetsets/kz.cafe.admin.widgetset.Kz_cafe_adminWidgetset/EDC7827FEEA59EE44AD790B1C6430C45.cache.png differ diff --git a/kz_cafe_admin/WebContent/VAADIN/widgetsets/kz.cafe.admin.widgetset.Kz_cafe_adminWidgetset/clear.cache.gif b/kz_cafe_admin/WebContent/VAADIN/widgetsets/kz.cafe.admin.widgetset.Kz_cafe_adminWidgetset/clear.cache.gif new file mode 100644 index 0000000..e565824 Binary files /dev/null and b/kz_cafe_admin/WebContent/VAADIN/widgetsets/kz.cafe.admin.widgetset.Kz_cafe_adminWidgetset/clear.cache.gif differ diff --git a/kz_cafe_admin/WebContent/VAADIN/widgetsets/kz.cafe.admin.widgetset.Kz_cafe_adminWidgetset/hosted.html b/kz_cafe_admin/WebContent/VAADIN/widgetsets/kz.cafe.admin.widgetset.Kz_cafe_adminWidgetset/hosted.html new file mode 100644 index 0000000..e8983af --- /dev/null +++ b/kz_cafe_admin/WebContent/VAADIN/widgetsets/kz.cafe.admin.widgetset.Kz_cafe_adminWidgetset/hosted.html @@ -0,0 +1,333 @@ + + + +This html file is for hosted mode support. + diff --git a/kz_cafe_admin/WebContent/VAADIN/widgetsets/kz.cafe.admin.widgetset.Kz_cafe_adminWidgetset/kz.cafe.admin.widgetset.Kz_cafe_adminWidgetset.nocache.js b/kz_cafe_admin/WebContent/VAADIN/widgetsets/kz.cafe.admin.widgetset.Kz_cafe_adminWidgetset/kz.cafe.admin.widgetset.Kz_cafe_adminWidgetset.nocache.js new file mode 100644 index 0000000..4259ab6 --- /dev/null +++ b/kz_cafe_admin/WebContent/VAADIN/widgetsets/kz.cafe.admin.widgetset.Kz_cafe_adminWidgetset/kz.cafe.admin.widgetset.Kz_cafe_adminWidgetset.nocache.js @@ -0,0 +1,286 @@ +function kz_cafe_admin_widgetset_Kz_cafe_adminWidgetset(){ + var $wnd_0 = window, $doc_0 = document, $stats = $wnd_0.__gwtStatsEvent?function(a){ + return $wnd_0.__gwtStatsEvent(a); + } + :null, $sessionId_0 = $wnd_0.__gwtStatsSessionId?$wnd_0.__gwtStatsSessionId:null, scriptsDone, loadDone, bodyDone, base = '', metaProps = {}, values = [], providers = [], answers = [], onLoadErrorFunc, propertyErrorFunc; + $stats && $stats({moduleName:'kz.cafe.admin.widgetset.Kz_cafe_adminWidgetset', sessionId:$sessionId_0, subSystem:'startup', evtGroup:'bootstrap', millis:(new Date).getTime(), type:'begin'}); + if (!$wnd_0.__gwt_stylesLoaded) { + $wnd_0.__gwt_stylesLoaded = {}; + } + if (!$wnd_0.__gwt_scriptsLoaded) { + $wnd_0.__gwt_scriptsLoaded = {}; + } + function isHostedMode(){ + var result = false; + try { + var query = $wnd_0.location.search; + return (query.indexOf('gwt.codesvr=') != -1 || (query.indexOf('gwt.hosted=') != -1 || $wnd_0.external && $wnd_0.external.gwtOnLoad)) && query.indexOf('gwt.hybrid') == -1; + } + catch (e) { + } + isHostedMode = function(){ + return result; + } + ; + return result; + } + + function maybeStartModule(){ + if (scriptsDone && loadDone) { + var iframe = $doc_0.getElementById('kz.cafe.admin.widgetset.Kz_cafe_adminWidgetset'); + var frameWnd = iframe.contentWindow; + if (isHostedMode()) { + frameWnd.__gwt_getProperty = function(name_0){ + return computePropValue(name_0); + } + ; + } + kz_cafe_admin_widgetset_Kz_cafe_adminWidgetset = null; + frameWnd.gwtOnLoad(onLoadErrorFunc, 'kz.cafe.admin.widgetset.Kz_cafe_adminWidgetset', base); + $stats && $stats({moduleName:'kz.cafe.admin.widgetset.Kz_cafe_adminWidgetset', sessionId:$sessionId_0, subSystem:'startup', evtGroup:'moduleStartup', millis:(new Date).getTime(), type:'end'}); + } + } + + function computeScriptBase(){ + var thisScript, markerId = '__gwt_marker_kz.cafe.admin.widgetset.Kz_cafe_adminWidgetset', markerScript; + $doc_0.write('\n"); + super.writeAjaxPageHtmlVaadinScripts(window, themeName, application, page, appUrl, themeUri, + appId, request); + } + +} \ No newline at end of file diff --git a/kz_cafe_admin/src/kz/cafe/admin/TabAbstractStatistics.java b/kz_cafe_admin/src/kz/cafe/admin/TabAbstractStatistics.java new file mode 100644 index 0000000..ad78127 --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/TabAbstractStatistics.java @@ -0,0 +1,150 @@ +package kz.cafe.admin; + +import java.util.*; +import kz.cafe.admin.constants.AccessConstants.EditMode; +import kz.cafe.admin.panels.model.*; +import kz.cafe.db.model.*; + +public abstract class TabAbstractStatistics extends AbstractTab{ + + private static final long serialVersionUID = 256003898599429323L; + + + + public TabAbstractStatistics(AdminMain application, Set setMode){ + super(application, setMode); + } + + + + public static void common(CustomDescriptor dscr){ + + CustomField field = new CustomField(); + field.visible = true; + field.search.mode = CustomField.Search.SEARCH_MODES.NONE; + field.name = "Всего запросов"; + field.db = MAbstractStatistics.F_TOTAL; + field.isEditable = false; + field.style.width = 100; + field.isSortable = true; + field.search.row = 0; + dscr.addField(field); + + + + field = new CustomField(); + field.visible = true; + field.search.mode = CustomField.Search.SEARCH_MODES.NONE; + field.name = "Новых Пользователей"; + field.db = MAbstractStatistics.F_USER_NEW; + field.isEditable = false; + field.style.width = 100; + field.isSortable = true; + field.search.row = 0; + dscr.addField(field); + + + + field = new CustomField(); + field.visible = true; + field.search.mode = CustomField.Search.SEARCH_MODES.NONE; + field.name = "Попыток входа"; + field.db = MAbstractStatistics.F_LOGINS; + field.isEditable = false; + field.style.width = 100; + field.isSortable = true; + field.search.row = 0; + dscr.addField(field); + + + + field = new CustomField(); + field.visible = true; + field.search.mode = CustomField.Search.SEARCH_MODES.NONE; + field.name = "Из них успешных"; + field.db = MAbstractStatistics.F_LOGIN_SUCCESS; + field.isEditable = false; + field.style.width = 100; + field.isSortable = true; + field.search.row = 0; + dscr.addField(field); + + + + + field = new CustomField(); + field.visible = true; + field.search.mode = CustomField.Search.SEARCH_MODES.NONE; + field.name = "Новых Заказов"; + field.db = MAbstractStatistics.F_ORDER_NEW; + field.isEditable = false; + field.style.width = 100; + field.isSortable = true; + field.search.row = 0; + dscr.addField(field); + + + + field = new CustomField(); + field.visible = true; + field.search.mode = CustomField.Search.SEARCH_MODES.NONE; + field.name = "Новых Отзывов"; + field.db = MAbstractStatistics.F_FEEDBACK_NEW; + field.isEditable = false; + field.style.width = 100; + field.isSortable = true; + field.search.row = 0; + dscr.addField(field); + + + + field = new CustomField(); + field.visible = true; + field.search.mode = CustomField.Search.SEARCH_MODES.NONE; + field.name = "Меню"; + field.db = MAbstractStatistics.F_MENU; + field.isEditable = false; + field.style.width = 100; + field.isSortable = true; + field.search.row = 0; + dscr.addField(field); + + + + field = new CustomField(); + field.visible = true; + field.search.mode = CustomField.Search.SEARCH_MODES.NONE; + field.name = "Отзывы"; + field.db = MAbstractStatistics.F_FEEDBACKS; + field.isEditable = false; + field.style.width = 100; + field.isSortable = true; + field.search.row = 0; + dscr.addField(field); + + + field = new CustomField(); + field.visible = true; + field.search.mode = CustomField.Search.SEARCH_MODES.NONE; + field.name = "Новости"; + field.db = MAbstractStatistics.F_NEWS; + field.isEditable = false; + field.style.width = 100; + field.isSortable = true; + field.search.row = 0; + dscr.addField(field); + + + field = new CustomField(); + field.visible = true; + field.search.mode = CustomField.Search.SEARCH_MODES.NONE; + field.name = "Распродажи"; + field.db = MAbstractStatistics.F_SALES; + field.isEditable = false; + field.style.width = 100; + field.isSortable = true; + field.search.row = 0; + dscr.addField(field); + } +} + diff --git a/kz_cafe_admin/src/kz/cafe/admin/TabCafe.java b/kz_cafe_admin/src/kz/cafe/admin/TabCafe.java new file mode 100644 index 0000000..abceaf4 --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/TabCafe.java @@ -0,0 +1,1126 @@ +package kz.cafe.admin; + +import java.util.*; +import kz.cafe.admin.constants.AccessConstants.EditMode; +import kz.cafe.admin.panel_extensions.*; +import kz.cafe.admin.panels.*; +import kz.cafe.admin.panels.model.*; +import kz.cafe.constants.*; +import kz.cafe.db.*; +import kz.cafe.db.model.*; + +/** + * Main application class. + */ +public class TabCafe extends AbstractTab{ + + private static final long serialVersionUID = -8282516969343075333L; + + + + + public TabCafe(AdminMain application, Set setMode){ + super(application, setMode); + } + + + + @Override + public DBListPanel build(){ + CustomDescriptor dscr = new CustomDescriptor(); + + CustomField field = new CustomField(); + field.visible = true; + field.search.mode = CustomField.Search.SEARCH_MODES.INTEGER; + field.name = "ID"; + field.db = "ID"; + field.isEditable = false; + field.style.width = 30; + field.isSortable = true; + field.search.row = 0; + dscr.addField(field); + + + + field = new CustomField(); + field.visible = true; + field.name = "Название"; + field.db = "name"; + field.isEditable = true; + field.style.width = 200; + field.isMust = true; + field.search.mode = CustomField.Search.SEARCH_MODES.LOCALIZED_STRING; + dscr.addField(field); + + + CustomImageField fieldLogo = new CustomImageField(); + fieldLogo.visible = true; + fieldLogo.name = "Логотип"; + fieldLogo.db = "image"; + fieldLogo.isEditable = true; + fieldLogo.style.width = 110; + fieldLogo.style.height = 110; + fieldLogo.isImageInTable = false; + dscr.addField(fieldLogo); + + + + +// CustomComboField ccf = new CustomComboField(); +// ccf.visible = true; +// ccf.name = "Тип"; +// ccf.db = "type"; +// ccf.isEditable = true; +// ccf.style.width = 100; +// ccf.add(new CustomComboField.Element(0, "кафе", null)); +// ccf.add(new CustomComboField.Element(1, "ресторан", null)); +// ccf.add(new CustomComboField.Element(2, "пиццерия", null)); +// ccf.add(new CustomComboField.Element(3, "бар", null)); +// ccf.isMust = true; +// dscr.addField(ccf); + + + + +// CustomFixedComboField ccf = new CustomFixedComboField(); +// ccf.visible = true; +// ccf.name = "Тип"; +// ccf.db = "type"; +// ccf.isEditable = true; +// ccf.style.width = 100; +// ccf.isMust = true; +// ccf.search.row = 1; +// dscr.addField(ccf); + field = new CustomMultiCombo("Тип", "types", CustomMultiCombo.TYPE.COMBO); + field.visible = true; + field.isEditable = true; + field.style.width = 150; + field.style.height = 100; +// field.isSortable = true; + field.search.mode = CustomField.Search.SEARCH_MODES.BOOLEAN_ONLY_TRUE; + field.search.row = 3; + dscr.addField(field); + + + + + + CustomFixedComboField ccf = new CustomFixedComboField(); + ccf.visible = true; + ccf.name = "Город"; + ccf.db = "city"; + ccf.isEditable = true; + ccf.style.width = 100; + ccf.isMust = true; + ccf.search.row = 0; + dscr.addField(ccf); + + + + + FCustomController fController = new FCustomController(); + fController.visible = true; + fController.name = "Резервирование"; + fController.db = "hasReservation"; + fController.isEditable = true; + fController.style.width = 50; + fController.isSortable = true; + fController.search.mode = CustomField.Search.SEARCH_MODES.BOOLEAN_ONLY_TRUE; + fController.search.row = 3; + dscr.addField(fController); + fController.listFields.add("Заказы с"); + fController.listFields.add("Заказы до"); + + + + CustomDateField dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "Заказы с"; + dateField.db = "timeOrdersFrom"; + dateField.isEditable = true; + dateField.style.width = 55; + dateField.isSortable = true; + dateField.format = "HH:mm"; + dateField.search.mode = CustomField.Search.SEARCH_MODES.TIME_RANGE; + dateField.search.row = 0; + dscr.addField(dateField); + + dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "Заказы до"; + dateField.db = "timeOrdersTo"; + dateField.isEditable = true; + dateField.style.width = 55; + dateField.isSortable = true; + dateField.format = "HH:mm"; + dateField.search.mode = CustomField.Search.SEARCH_MODES.TIME_RANGE; + dateField.search.row = 0; + dscr.addField(dateField); + + + + + fController = new FCustomController(); + fController.visible = true; + fController.name = "Доставка"; + fController.db = "hasDelivery"; + fController.isEditable = true; + fController.style.width = 50; + fController.isSortable = true; + fController.search.mode = CustomField.Search.SEARCH_MODES.BOOLEAN_ONLY_TRUE; + fController.search.row = 3; + fController.listFields.add("Дост. с"); + fController.listFields.add("Дост. до"); + dscr.addField(fController); + + + + dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "Дост. с"; + dateField.db = "timeReservationFrom"; + dateField.isEditable = true; + dateField.style.width = 50; + dateField.isSortable = true; + dateField.format = "HH:mm"; + dateField.search.mode = CustomField.Search.SEARCH_MODES.TIME_RANGE; + dateField.search.row = 0; + dscr.addField(dateField); + + dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "Дост. до"; + dateField.db = "timeReservationTo"; + dateField.isEditable = true; + dateField.style.width = 50; + dateField.isSortable = true; + dateField.format = "HH:mm"; + dateField.search.mode = CustomField.Search.SEARCH_MODES.TIME_RANGE; + dateField.search.row = 0; + dscr.addField(dateField); + + + + + + + + + + ccf = new CustomFixedComboField(); + ccf.type = CustomFixedComboField.TYPE.IMAGE; + ccf.visible = true; + ccf.name = "Рейтинг"; + ccf.db = "rate"; + if(application.isAdmin){ + ccf.isEditable = true; + } + else{ + ccf.isEditable = false; + } + ccf.style.width = 60; + ccf.add(new CustomFixedComboField.Element(0, "нет", "")); + ccf.add(new CustomFixedComboField.Element(1, "1", "")); + ccf.add(new CustomFixedComboField.Element(2, "2", "")); + ccf.add(new CustomFixedComboField.Element(3, "3", "")); + ccf.add(new CustomFixedComboField.Element(4, "4", "")); + ccf.add(new CustomFixedComboField.Element(5, "5", "")); + ccf.isMust = true; + ccf.search.row = 1; + dscr.addField(ccf); + + + + + + + + + + + +// CustomDateField dateField = new CustomDateField(); +// dateField.visible = true; +// dateField.name = "Открыто"; +// dateField.db = "timeOpen"; +// dateField.isEditable = true; +// dateField.style.width = 60; +// dateField.isSortable = true; +// dateField.format = "HH:mm"; +// dateField.search.mode = CustomField.Search.SEARCH_MODES.TIME_RANGE; +// dateField.search.row = 0; +// dscr.addField(dateField); +// +// dateField = new CustomDateField(); +// dateField.visible = true; +// dateField.name = "Закрыто"; +// dateField.db = "timeClose"; +// dateField.isEditable = true; +// dateField.style.width = 60; +// dateField.isSortable = true; +// dateField.format = "HH:mm"; +// dateField.search.mode = CustomField.Search.SEARCH_MODES.TIME_RANGE; +// dateField.search.row = 0; +// dscr.addField(dateField); +// +// +// dateField = new CustomDateField(); +// dateField.visible = true; +// dateField.name = "(вых) Открыто"; +// dateField.db = "timeOpenWeekend"; +// dateField.isEditable = true; +// dateField.style.width = 80; +// dateField.isSortable = true; +// dateField.format = "HH:mm"; +// dateField.search.mode = CustomField.Search.SEARCH_MODES.TIME_RANGE; +// dateField.search.row = 0; +// dscr.addField(dateField); +// +// dateField = new CustomDateField(); +// dateField.visible = true; +// dateField.name = "(вых) Закрыто"; +// dateField.db = "timeCloseWeekend"; +// dateField.isEditable = true; +// dateField.style.width = 80; +// dateField.isSortable = true; +// dateField.format = "HH:mm"; +// dateField.search.mode = CustomField.Search.SEARCH_MODES.TIME_RANGE; +// dateField.search.row = 0; +// dscr.addField(dateField); + + + + + + dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "(Пн) Откр"; + dateField.db = "timeOpenMo"; + dateField.isEditable = true; + dateField.style.width = 45; + dateField.isSortable = true; + dateField.format = "HH:mm"; + dateField.search.mode = CustomField.Search.SEARCH_MODES.TIME_RANGE; + dateField.search.row = 0; + dscr.addField(dateField); + + dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "(Пн) Закр"; + dateField.db = "timeCloseMo"; + dateField.isEditable = true; + dateField.style.width = 45; + dateField.isSortable = true; + dateField.format = "HH:mm"; + dateField.search.mode = CustomField.Search.SEARCH_MODES.TIME_RANGE; + dateField.search.row = 0; + dscr.addField(dateField); + + + + + dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "(Вт) Откр"; + dateField.db = "timeOpenTu"; + dateField.isEditable = true; + dateField.style.width = 45; + dateField.isSortable = true; + dateField.format = "HH:mm"; + dateField.search.mode = CustomField.Search.SEARCH_MODES.TIME_RANGE; + dateField.search.row = 0; + dscr.addField(dateField); + + dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "(Вт) Закр"; + dateField.db = "timeCloseTu"; + dateField.isEditable = true; + dateField.style.width = 45; + dateField.isSortable = true; + dateField.format = "HH:mm"; + dateField.search.mode = CustomField.Search.SEARCH_MODES.TIME_RANGE; + dateField.search.row = 0; + dscr.addField(dateField); + + + + + + dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "(Ср) Откр"; + dateField.db = "timeOpenWe"; + dateField.isEditable = true; + dateField.style.width = 45; + dateField.isSortable = true; + dateField.format = "HH:mm"; + dateField.search.mode = CustomField.Search.SEARCH_MODES.TIME_RANGE; + dateField.search.row = 0; + dscr.addField(dateField); + + dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "(Ср) Закр"; + dateField.db = "timeCloseWe"; + dateField.isEditable = true; + dateField.style.width = 45; + dateField.isSortable = true; + dateField.format = "HH:mm"; + dateField.search.mode = CustomField.Search.SEARCH_MODES.TIME_RANGE; + dateField.search.row = 0; + dscr.addField(dateField); + + + + + + dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "(Чт) Откр"; + dateField.db = "timeOpenTh"; + dateField.isEditable = true; + dateField.style.width = 45; + dateField.isSortable = true; + dateField.format = "HH:mm"; + dateField.search.mode = CustomField.Search.SEARCH_MODES.TIME_RANGE; + dateField.search.row = 0; + dscr.addField(dateField); + + dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "(Чт) Закр"; + dateField.db = "timeCloseTh"; + dateField.isEditable = true; + dateField.style.width = 45; + dateField.isSortable = true; + dateField.format = "HH:mm"; + dateField.search.mode = CustomField.Search.SEARCH_MODES.TIME_RANGE; + dateField.search.row = 0; + dscr.addField(dateField); + + + + + + dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "(Пт) Откр"; + dateField.db = "timeOpenFr"; + dateField.isEditable = true; + dateField.style.width = 45; + dateField.isSortable = true; + dateField.format = "HH:mm"; + dateField.search.mode = CustomField.Search.SEARCH_MODES.TIME_RANGE; + dateField.search.row = 0; + dscr.addField(dateField); + + dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "(Пт) Закр"; + dateField.db = "timeCloseFr"; + dateField.isEditable = true; + dateField.style.width = 45; + dateField.isSortable = true; + dateField.format = "HH:mm"; + dateField.search.mode = CustomField.Search.SEARCH_MODES.TIME_RANGE; + dateField.search.row = 0; + dscr.addField(dateField); + + + + + dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "(Сб) Откр"; + dateField.db = "timeOpenSa"; + dateField.isEditable = true; + dateField.style.width = 45; + dateField.isSortable = true; + dateField.format = "HH:mm"; + dateField.search.mode = CustomField.Search.SEARCH_MODES.TIME_RANGE; + dateField.search.row = 0; + dscr.addField(dateField); + + dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "(Сб) Закр"; + dateField.db = "timeCloseSa"; + dateField.isEditable = true; + dateField.style.width = 45; + dateField.isSortable = true; + dateField.format = "HH:mm"; + dateField.search.mode = CustomField.Search.SEARCH_MODES.TIME_RANGE; + dateField.search.row = 0; + dscr.addField(dateField); + + + + + + dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "(Вс) Откр"; + dateField.db = "timeOpenSu"; + dateField.isEditable = true; + dateField.style.width = 45; + dateField.isSortable = true; + dateField.format = "HH:mm"; + dateField.search.mode = CustomField.Search.SEARCH_MODES.TIME_RANGE; + dateField.search.row = 0; + dscr.addField(dateField); + + dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "(Вс) Закр"; + dateField.db = "timeCloseSu"; + dateField.isEditable = true; + dateField.style.width = 45; + dateField.isSortable = true; + dateField.format = "HH:mm"; + dateField.search.mode = CustomField.Search.SEARCH_MODES.TIME_RANGE; + dateField.search.row = 0; + dscr.addField(dateField); + + + + + dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "Открыто"; + dateField.db = "timeOpen"; + dateField.isEditable = true; + dateField.style.width = 60; + dateField.isSortable = true; + dateField.format = "HH:mm"; + dateField.search.mode = CustomField.Search.SEARCH_MODES.TIME_RANGE; + dateField.search.row = 0; + dscr.addField(dateField); + + dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "Закрыто"; + dateField.db = "timeClose"; + dateField.isEditable = true; + dateField.style.width = 60; + dateField.isSortable = true; + dateField.format = "HH:mm"; + dateField.search.mode = CustomField.Search.SEARCH_MODES.TIME_RANGE; + dateField.search.row = 0; + dscr.addField(dateField); + + + dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "(вых) Открыто"; + dateField.db = "timeOpenWeekend"; + dateField.isEditable = true; + dateField.style.width = 80; + dateField.isSortable = true; + dateField.format = "HH:mm"; + dateField.search.mode = CustomField.Search.SEARCH_MODES.TIME_RANGE; + dateField.search.row = 0; + dscr.addField(dateField); + + dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "(вых) Закрыто"; + dateField.db = "timeCloseWeekend"; + dateField.isEditable = true; + dateField.style.width = 80; + dateField.isSortable = true; + dateField.format = "HH:mm"; + dateField.search.mode = CustomField.Search.SEARCH_MODES.TIME_RANGE; + dateField.search.row = 0; + dscr.addField(dateField); + + + + + + + field = new CustomMultiCombo("Сервис", "service", CustomMultiCombo.TYPE.COMBO); + field.visible = true; + field.isEditable = true; + field.isMust = false; + field.style.width = 200; + field.style.height = 100; +// field.isSortable = true; + field.search.mode = CustomField.Search.SEARCH_MODES.BOOLEAN_ONLY_TRUE; + field.search.row = 3; + dscr.addField(field); + + + + + + field = new CustomMultiCombo("Требования", "faceControl", CustomMultiCombo.TYPE.COMBO); + field.visible = true; + field.isEditable = true; + field.isMust = false; + field.style.width = 200; + field.style.height = 100; + +// field.isSortable = true; + field.search.mode = CustomField.Search.SEARCH_MODES.BOOLEAN_ONLY_TRUE; + field.search.row = 3; + dscr.addField(field); + + + + + + field = new CustomMultiCombo("Кухни", "cuisines", CustomMultiCombo.TYPE.COMBO); + field.visible = true; + field.isEditable = true; + field.isMust = false; + field.style.width = 200; + field.style.height = 100; + +// field.isSortable = true; + field.search.mode = CustomField.Search.SEARCH_MODES.BOOLEAN_ONLY_TRUE; + field.search.row = 4; + dscr.addField(field); + + + + + field = new CustomField(); + field.visible = true; + field.name = "Описание"; + field.db = "description"; + field.isEditable = true; + field.style.width = 800; + field.style.height = 100; + field.search.mode = CustomField.Search.SEARCH_MODES.LOCALIZED_STRING; + field.search.row = 1; + dscr.addField(field); + + + + field = new CustomField(); + field.visible = true; + field.name = "Телефон"; + field.db = "phone"; + field.isEditable = true; + field.style.width = 100; + field.search.mode = CustomField.Search.SEARCH_MODES.STRING; + field.search.row = 1; + dscr.addField(field); + + + + + field = new CustomField(); + field.visible = true; + field.name = "Адрес"; + field.db = "address"; + field.isEditable = true; + field.style.width = 200; + field.search.mode = CustomField.Search.SEARCH_MODES.STRING; + field.search.row = 2; + dscr.addField(field); + + + + + + field = new CustomField(); + field.visible = true; + field.name = "Карта"; + field.db = "coordinates"; + + if(application.isAdmin) { + field.isEditable = true; + } + else{ + field.isEditable = false; + } + field.style.width = 200; + //field.search.mode = CustomField.Search.SEARCH_MODES.STRING; + field.search.row = 1; + dscr.addField(field); + + + ccf = new CustomFixedComboField(); + ccf.type = CustomFixedComboField.TYPE.IMAGE; + ccf.visible = true; + ccf.name = "Ср.Cчет"; + ccf.db = "price"; + ccf.isEditable = true; + ccf.style.width = 50; + ccf.add(new CustomFixedComboField.Element(0, "$", "")); + ccf.add(new CustomFixedComboField.Element(1, "$$", "")); + ccf.add(new CustomFixedComboField.Element(2, "$$$", "")); + ccf.isMust = true; + ccf.search.row = 1; + dscr.addField(ccf); + + + + field = new CustomField(); + field.visible = true; + field.name = "Ср. счет (от)"; + field.db = "bill_average_min"; + field.isEditable = true; + field.style.width = 80; + field.style.expandable = false; + field.search.mode = CustomField.Search.SEARCH_MODES.INTEGER_RANGE; + field.search.row = 3; + dscr.addField(field); + + + field = new CustomField(); + field.visible = true; + field.name = "Ср. счет (до)"; + field.db = "bill_average_max"; + field.isEditable = true; + field.style.width = 80; + field.style.expandable = false; + field.search.mode = CustomField.Search.SEARCH_MODES.INTEGER_RANGE; + field.search.row = 3; + dscr.addField(field); + + + + field = new CustomField(); + field.visible = true; + field.name = "Всего столиков"; + field.db = "tableTotal"; + field.isEditable = true; + field.style.width = 80; + field.style.expandable = false; + field.search.mode = CustomField.Search.SEARCH_MODES.INTEGER_RANGE; + field.search.row = 3; + dscr.addField(field); + + + field = new CustomField(); + field.visible = true; + field.name = "Из них свободно"; + field.db = "tableFree"; + field.isEditable = true; + field.style.width = 80; + field.style.expandable = false; + field.search.mode = CustomField.Search.SEARCH_MODES.INTEGER_RANGE; + field.search.row = 3; + dscr.addField(field); + + + + + if(application.isAdmin){ + ccf = new CustomFixedComboField(); + ccf.visible = true; + ccf.name = "Владелец"; + ccf.db = MAbstractDataElement.F_OWNER_ID; + ccf.isEditable = true; + ccf.style.width = 120; + ccf.isMust = true; + //ccf.search.mode = CustomField.Search.SEARCH_MODES.NONE; + ccf.search.row = 2; + dscr.addField(ccf); + } + + + + + + dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "Создан"; + dateField.db = "created"; + dateField.isEditable = false; + dateField.style.width = 120; + dateField.isSortable = true; + dateField.search.mode = CustomField.Search.SEARCH_MODES.DATE_RANGE; + dateField.search.row = 2; + dscr.addField(dateField); + + + + + + dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "Обновлен"; + dateField.db = "updated"; + dateField.isEditable = false; + dateField.style.width = 120; + dateField.isSortable = true; + dateField.search.mode = CustomField.Search.SEARCH_MODES.DATE_RANGE; + dateField.search.row = 2; + dscr.addField(dateField); + + + + field = new CustomField(); + field.visible = true; + field.name = "Опубликовано"; + field.db = "published"; + field.isEditable = true; + field.style.width = 50; + field.isSortable = true; + field.search.mode = CustomField.Search.SEARCH_MODES.BOOLEAN_ONLY_TRUE; + field.search.row = 3; + dscr.addField(field); + + + Constraint constraint = new Constraint(); + + + if(application.isAdmin){ + } + else{ + constraint.criteria.add(new Constraint.Criterion(MUser.F_OWNER_ID, application.UID)); + } + + + + + DBListPanel panel = new DBListPanel(application, + MCafe.class, + dscr, + Dimension.getFull(application), + setMode, + constraint); + panel.addPanel(new ExtraPanelGoogleMap(panel, "Карта"), false); + panel.addPanel(new ExtraPanelImageUploader(panel, fieldLogo), false); + panel.addPanel(new ExtraPanelImageViewer(panel, fieldLogo), true); + panel.addPanel(new ExtraPanelMenu(application, panel), false); + panel.addPanel(new ExtraPanelFeedbacks(application, panel), false); + + + return panel; + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + @Override + public DBSingle build(int ID){ + CustomDescriptor dscr = new CustomDescriptor(); + + CustomField field = new CustomField(); + field.visible = true; + field.search.mode = CustomField.Search.SEARCH_MODES.INTEGER; + field.name = "ID"; + field.db = "ID"; + field.isEditable = false; + field.style.width = 30; + field.isSortable = true; + field.search.row = 0; + dscr.addField(field); + + + + field = new CustomField(); + field.visible = true; + field.name = "Название"; + field.db = "name"; + field.isEditable = true; + field.style.width = 200; + field.isMust = true; + field.search.mode = CustomField.Search.SEARCH_MODES.LOCALIZED_STRING; + dscr.addField(field); + + + CustomImageField fieldLogo = new CustomImageField(); + fieldLogo.visible = true; + fieldLogo.name = "Логотип"; + fieldLogo.db = "image"; + fieldLogo.isEditable = true; + fieldLogo.style.width = 110; + fieldLogo.style.height = 110; + fieldLogo.isImageInTable = false; + dscr.addField(fieldLogo); + + + + +// CustomComboField ccf = new CustomComboField(); +// ccf.visible = true; +// ccf.name = "Тип"; +// ccf.db = "type"; +// ccf.isEditable = true; +// ccf.style.width = 100; +// ccf.add(new CustomComboField.Element(0, "кафе", null)); +// ccf.add(new CustomComboField.Element(1, "ресторан", null)); +// ccf.add(new CustomComboField.Element(2, "пиццерия", null)); +// ccf.add(new CustomComboField.Element(3, "бар", null)); +// ccf.isMust = true; +// dscr.addField(ccf); + + + + + CustomFixedComboField ccf = new CustomFixedComboField(); + ccf.visible = true; + ccf.name = "Тип"; + ccf.db = "type"; + ccf.isEditable = true; + ccf.style.width = 100; + ccf.isMust = true; + ccf.search.row = 1; + dscr.addField(ccf); + + + + + ccf = new CustomFixedComboField(); + ccf.visible = true; + ccf.name = "Город"; + ccf.db = "city"; + ccf.isEditable = true; + ccf.style.width = 100; + ccf.isMust = true; + ccf.search.row = 0; + dscr.addField(ccf); + + + + + + ccf = new CustomFixedComboField(); + ccf.type = CustomFixedComboField.TYPE.IMAGE; + ccf.visible = true; + ccf.name = "Рейтинг"; + ccf.db = "rate"; + ccf.isEditable = true; + ccf.style.width = 60; + ccf.add(new CustomFixedComboField.Element(0, "нет", "")); + ccf.add(new CustomFixedComboField.Element(1, "1", "")); + ccf.add(new CustomFixedComboField.Element(2, "2", "")); + ccf.add(new CustomFixedComboField.Element(3, "3", "")); + ccf.add(new CustomFixedComboField.Element(4, "4", "")); + ccf.add(new CustomFixedComboField.Element(5, "5", "")); + ccf.isMust = true; + ccf.search.row = 1; + dscr.addField(ccf); + + + + ccf = new CustomFixedComboField(); + ccf.type = CustomFixedComboField.TYPE.IMAGE; + ccf.visible = true; + ccf.name = "Ср.Cчет"; + ccf.db = "price"; + ccf.isEditable = true; + ccf.style.width = 50; + ccf.add(new CustomFixedComboField.Element(0, "$", "")); + ccf.add(new CustomFixedComboField.Element(1, "$$", "")); + ccf.add(new CustomFixedComboField.Element(2, "$$$", "")); + ccf.isMust = true; + ccf.search.row = 1; + dscr.addField(ccf); + + + + + + + + + CustomDateField dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "Открыто"; + dateField.db = "timeOpen"; + dateField.isEditable = true; + dateField.style.width = 60; + dateField.isSortable = true; + dateField.format = "HH:mm"; + dateField.search.mode = CustomField.Search.SEARCH_MODES.TIME_RANGE; + dateField.search.row = 0; + dscr.addField(dateField); + + dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "Закрыто"; + dateField.db = "timeClose"; + dateField.isEditable = true; + dateField.style.width = 60; + dateField.isSortable = true; + dateField.format = "HH:mm"; + dateField.search.mode = CustomField.Search.SEARCH_MODES.TIME_RANGE; + dateField.search.row = 0; + dscr.addField(dateField); + + + + + + + field = new CustomField(); + field.visible = true; + field.name = "Сервис"; + field.db = "service"; + field.isEditable = true; + field.style.width = 40; +// field.isSortable = true; + field.search.mode = CustomField.Search.SEARCH_MODES.BOOLEAN_ONLY_TRUE; + field.search.row = 3; + dscr.addField(field); + + + + + + + + + field = new CustomField(); + field.visible = true; + field.name = "Описание"; + field.db = "description"; + field.isEditable = true; + field.style.width = 200; + field.search.mode = CustomField.Search.SEARCH_MODES.LOCALIZED_STRING; + field.search.row = 1; + dscr.addField(field); + + + + field = new CustomField(); + field.visible = true; + field.name = "Телефон"; + field.db = "phone"; + field.isEditable = true; + field.style.width = 100; + field.search.mode = CustomField.Search.SEARCH_MODES.STRING; + field.search.row = 1; + dscr.addField(field); + + + + + field = new CustomField(); + field.visible = true; + field.name = "Адрес"; + field.db = "address"; + field.isEditable = true; + field.style.width = 200; + field.search.mode = CustomField.Search.SEARCH_MODES.STRING; + field.search.row = 2; + dscr.addField(field); + + + + + + field = new CustomField(); + field.visible = true; + field.name = "Карта"; + field.db = "coordinates"; + field.isEditable = true; + field.style.width = 200; + //field.search.mode = CustomField.Search.SEARCH_MODES.STRING; + field.search.row = 1; + dscr.addField(field); + + + + if(application.isAdmin){ + ccf = new CustomFixedComboField(); + ccf.visible = true; + ccf.name = "Владелец"; + ccf.db = MAbstractDataElement.F_OWNER_ID; + ccf.isEditable = true; + ccf.style.width = 120; + ccf.isMust = true; + //ccf.search.mode = CustomField.Search.SEARCH_MODES.NONE; + ccf.search.row = 2; + dscr.addField(ccf); + } + + + + + + dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "Создан"; + dateField.db = "created"; + dateField.isEditable = false; + dateField.style.width = 120; + dateField.isSortable = true; + dateField.search.mode = CustomField.Search.SEARCH_MODES.DATE_RANGE; + dateField.search.row = 2; + dscr.addField(dateField); + + + + + + dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "Обновлен"; + dateField.db = "updated"; + dateField.isEditable = false; + dateField.style.width = 120; + dateField.isSortable = true; + dateField.search.mode = CustomField.Search.SEARCH_MODES.DATE_RANGE; + dateField.search.row = 2; + dscr.addField(dateField); + + + + field = new CustomField(); + field.visible = true; + field.name = "Опубликовано"; + field.db = "published"; + field.isEditable = true; + field.style.width = 50; + field.isSortable = true; + field.search.mode = CustomField.Search.SEARCH_MODES.BOOLEAN_ONLY_TRUE; + field.search.row = 3; + dscr.addField(field); + + + Constraint constraint = new Constraint(); + + + if(application.isAdmin){ + } + else{ + constraint.criteria.add(new Constraint.Criterion(MUser.F_OWNER_ID, application.UID)); + } + + + + + DBSingle panel = new DBSingle(application, + MCafe.class, + ID, + dscr, + Dimension.getFull(application), + setMode + ); + + + return panel; + } +} + diff --git a/kz_cafe_admin/src/kz/cafe/admin/TabCafeType.java b/kz_cafe_admin/src/kz/cafe/admin/TabCafeType.java new file mode 100644 index 0000000..51be4df --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/TabCafeType.java @@ -0,0 +1,174 @@ +package kz.cafe.admin; + +import java.util.*; +import kz.cafe.admin.constants.AccessConstants.EditMode; +import kz.cafe.admin.panel_extensions.*; +import kz.cafe.admin.panels.*; +import kz.cafe.admin.panels.model.*; +import kz.cafe.db.model.*; + + +public class TabCafeType extends AbstractTab{ + + private static final long serialVersionUID = 964943025725562505L; + + + static CustomDescriptor dscr; + + static{ + dscr = new CustomDescriptor(); + + CustomField field = new CustomField(); + field.visible = true; + field.search.mode = CustomField.Search.SEARCH_MODES.INTEGER; + field.name = "ID"; + field.db = "ID"; + field.isEditable = false; + field.style.width = 50; + field.isSortable = true; + field.search.row = 0; + dscr.addField(field); + + + + field = new CustomField(); + field.visible = true; + field.name = "Название"; + field.db = "name"; + field.isEditable = true; + field.style.width = 150; + field.isMust = true; + field.search.mode = CustomField.Search.SEARCH_MODES.LOCALIZED_STRING; + dscr.addField(field); + + + + + + + + + field = new CustomField(); + field.visible = true; + //field.searchable = CustomField.SEARCH_MODES.INTEGER; + + field.name = "Описание"; + field.db = "description"; + field.isEditable = true; + field.style.width = 0; + field.search.mode = CustomField.Search.SEARCH_MODES.LOCALIZED_STRING; + dscr.addField(field); + + + + + CustomImageField fieldImage = new CustomImageField(); + fieldImage.visible = true; + fieldImage.name = "Изображение"; + fieldImage.db = "image"; + fieldImage.isEditable = true; + fieldImage.style.width = 40; + fieldImage.style.height = 40; + fieldImage.isImageInTable = true; + dscr.addField(fieldImage); + + + + + + + + CustomDateField dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "Создан"; + dateField.db = "created"; + dateField.isEditable = false; + dateField.style.width = 120; + dateField.isSortable = true; + dateField.search.mode = CustomField.Search.SEARCH_MODES.DATE_RANGE; + dateField.search.row = 1; + dscr.addField(dateField); + + + + + + dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "Обновлен"; + dateField.db = "updated"; + dateField.isEditable = false; + dateField.style.width = 120; + dateField.isSortable = true; + dateField.search.mode = CustomField.Search.SEARCH_MODES.DATE_RANGE; + dateField.search.row = 1; + dscr.addField(dateField); + + + + field = new CustomField(); + field.visible = true; + field.name = "Опубликовано"; + field.db = "published"; + field.isEditable = true; + field.style.width = 40; + field.isSortable = true; + field.search.mode = CustomField.Search.SEARCH_MODES.BOOLEAN_ONLY_TRUE; + field.search.row = 1; + dscr.addField(field); + + + + field = new CustomField(); + field.visible = true; + field.search.mode = CustomField.Search.SEARCH_MODES.INTEGER; + field.name = "Порядок"; + field.db = "order"; + field.isEditable = true; + field.style.width = 50; + field.isSortable = true; + field.style.expandable = false; + field.search.row = 0; + dscr.addField(field); + } + + + + + public TabCafeType(AdminMain application, Set setMode){ + super(application, setMode); + } + + + + + + + @Override + public DBListPanel build(){ + DBListPanel panel = new DBListPanel(application, MCafeType.class, dscr, Dimension.getFull(application), setMode); + panel.addPanel(new ExtraPanelImageUploader(panel, (CustomImageField) dscr.mapDBFields.get(MAbstractDescriptor.F_IMAGE)), false); + //panelCourse.addPanel(new ExtraPanelImageViewer(panelCourse, fieldImage, 50), true); + + return panel; + } + + + + + + + @Override + public DBSingle build(int ID){ + DBSingle panel = new DBSingle(application, + MCafeType.class, + ID, + dscr, + Dimension.getFull(application), + setMode + ); + + return panel; + } +} + diff --git a/kz_cafe_admin/src/kz/cafe/admin/TabCity.java b/kz_cafe_admin/src/kz/cafe/admin/TabCity.java new file mode 100644 index 0000000..9f0445d --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/TabCity.java @@ -0,0 +1,285 @@ +package kz.cafe.admin; + +import java.util.*; +import kz.cafe.admin.constants.AccessConstants.EditMode; +import kz.cafe.admin.panel_extensions.*; +import kz.cafe.admin.panels.*; +import kz.cafe.admin.panels.model.*; +import kz.cafe.db.model.*; + + +public class TabCity extends AbstractTab{ + private static final long serialVersionUID = -7434977087398227228L; + + + + public TabCity(AdminMain application, Set setMode){ + super(application, setMode); + } + + + + + + @Override + public DBListPanel build(){ + CustomDescriptor dscr = new CustomDescriptor(); + + CustomField field = new CustomField(); + field.visible = true; + field.search.mode = CustomField.Search.SEARCH_MODES.INTEGER; + field.name = "ID"; + field.db = "ID"; + field.isEditable = false; + field.style.width = 50; + field.isSortable = true; + field.search.row = 0; + dscr.addField(field); + + + + field = new CustomField(); + field.visible = true; + field.name = "Название"; + field.db = "name"; + field.isEditable = true; + field.style.width = 150; + field.isMust = true; + field.search.mode = CustomField.Search.SEARCH_MODES.LOCALIZED_STRING; + dscr.addField(field); + + + + field = new CustomField(); + field.visible = true; + field.name = "Часовой Пояс"; + field.db = "GMT"; + field.isEditable = true; + field.style.width = 80; + field.isMust = true; + field.search.mode = CustomField.Search.SEARCH_MODES.INTEGER; + dscr.addField(field); + + + + + + + field = new CustomField(); + field.visible = true; + //field.searchable = CustomField.SEARCH_MODES.INTEGER; + + field.name = "Описание"; + field.db = "description"; + field.isEditable = true; + field.style.width = 0; + field.search.mode = CustomField.Search.SEARCH_MODES.LOCALIZED_STRING; + dscr.addField(field); + + + + + CustomImageField fieldImage = new CustomImageField(); + fieldImage.visible = true; + fieldImage.name = "Изображение"; + fieldImage.db = MAbstractDescriptor.F_IMAGE; + fieldImage.isEditable = true; + fieldImage.style.width = 55; + fieldImage.style.height = 55; + fieldImage.isImageInTable = false; + dscr.addField(fieldImage); + + + + + field = new CustomField(); + field.visible = true; + field.name = "Есть кафе"; + field.db = "hasCafe"; + field.isEditable = true; + field.style.width = 60; + field.isSortable = true; + field.search.mode = CustomField.Search.SEARCH_MODES.BOOLEAN_ONLY_TRUE; + dscr.addField(field); + + + + + + + CustomDateField dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "Создан"; + dateField.db = "created"; + dateField.isEditable = false; + dateField.style.width = 120; + dateField.isSortable = true; + dateField.search.mode = CustomField.Search.SEARCH_MODES.DATE_RANGE; + dateField.search.row = 1; + dscr.addField(dateField); + + + + + + dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "Обновлен"; + dateField.db = "updated"; + dateField.isEditable = false; + dateField.style.width = 120; + dateField.isSortable = true; + dateField.search.mode = CustomField.Search.SEARCH_MODES.DATE_RANGE; + dateField.search.row = 1; + dscr.addField(dateField); + + + + field = new CustomField(); + field.visible = true; + field.name = "Опубликовано"; + field.db = "published"; + field.isEditable = true; + field.style.width = 40; + field.isSortable = true; + field.search.mode = CustomField.Search.SEARCH_MODES.BOOLEAN_ONLY_TRUE; + field.search.row = 1; + dscr.addField(field); + + + DBListPanel panel = new DBListPanel(application, MCity.class, dscr, Dimension.getFull(application), setMode); + panel.addPanel(new ExtraPanelImageUploader(panel, (CustomImageField) dscr.mapDBFields.get(MAbstractDescriptor.F_IMAGE)), false); + panel.addPanel(new ExtraPanelImageViewer(panel, fieldImage, fieldImage.style.height), true); + + return panel; + } + + + + @Override + public DBSingle build(int ID){ + CustomDescriptor dscr = new CustomDescriptor(); + + CustomField field = new CustomField(); + field.visible = true; + field.search.mode = CustomField.Search.SEARCH_MODES.INTEGER; + field.name = "ID"; + field.db = "ID"; + field.isEditable = false; + field.style.width = 50; + field.isSortable = true; + field.search.row = 0; + dscr.addField(field); + + + + field = new CustomField(); + field.visible = true; + field.name = "Название"; + field.db = "name"; + field.isEditable = true; + field.style.width = 150; + field.isMust = true; + field.search.mode = CustomField.Search.SEARCH_MODES.LOCALIZED_STRING; + dscr.addField(field); + + + + field = new CustomField(); + field.visible = true; + field.name = "Часовой Пояс"; + field.db = "GMT"; + field.isEditable = true; + field.style.width = 80; + field.isMust = true; + field.search.mode = CustomField.Search.SEARCH_MODES.INTEGER; + dscr.addField(field); + + + + + + + field = new CustomField(); + field.visible = true; + //field.searchable = CustomField.SEARCH_MODES.INTEGER; + + field.name = "Описание"; + field.db = "description"; + field.isEditable = true; + field.style.width = 0; + field.search.mode = CustomField.Search.SEARCH_MODES.LOCALIZED_STRING; + dscr.addField(field); + + + + + CustomImageField fieldImage = new CustomImageField(); + fieldImage.visible = true; + fieldImage.name = "Изображение"; + fieldImage.db = MAbstractDescriptor.F_IMAGE; + fieldImage.isEditable = true; + fieldImage.style.width = 55; + fieldImage.style.height = 55; + fieldImage.isImageInTable = false; + dscr.addField(fieldImage); + + + + + + + + CustomDateField dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "Создан"; + dateField.db = "created"; + dateField.isEditable = false; + dateField.style.width = 120; + dateField.isSortable = true; + dateField.search.mode = CustomField.Search.SEARCH_MODES.DATE_RANGE; + dateField.search.row = 1; + dscr.addField(dateField); + + + + + + dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "Обновлен"; + dateField.db = "updated"; + dateField.isEditable = false; + dateField.style.width = 120; + dateField.isSortable = true; + dateField.search.mode = CustomField.Search.SEARCH_MODES.DATE_RANGE; + dateField.search.row = 1; + dscr.addField(dateField); + + + + field = new CustomField(); + field.visible = true; + field.name = "Опубликовано"; + field.db = "published"; + field.isEditable = true; + field.style.width = 40; + field.isSortable = true; + field.search.mode = CustomField.Search.SEARCH_MODES.BOOLEAN_ONLY_TRUE; + field.search.row = 1; + dscr.addField(field); + + + + DBSingle panel = new DBSingle(application, + MCity.class, + ID, + dscr, + Dimension.get80(application), + setMode + ); + + return panel; + } +} + diff --git a/kz_cafe_admin/src/kz/cafe/admin/TabCourse.java b/kz_cafe_admin/src/kz/cafe/admin/TabCourse.java new file mode 100644 index 0000000..f439540 --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/TabCourse.java @@ -0,0 +1,665 @@ +package kz.cafe.admin; + +import java.util.*; +import kz.cafe.admin.constants.*; +import kz.cafe.admin.constants.AccessConstants.EditMode; +import kz.cafe.admin.panel_extensions.*; +import kz.cafe.admin.panels.*; +import kz.cafe.admin.panels.model.*; +import kz.cafe.db.*; +import kz.cafe.db.model.*; + + +public class TabCourse extends AbstractTab{ + private static final long serialVersionUID = 3315039865664276276L; + + + + public TabCourse(AdminMain application, Set setMode){ + super(application, setMode); + } + + + + + @Override + public DBListPanel build(){ + CustomDescriptor dscr = new CustomDescriptor(); + + CustomField field = new CustomField(); + field.visible = true; + field.search.mode = CustomField.Search.SEARCH_MODES.INTEGER; + field.name = "ID"; + field.db = "ID"; + field.isEditable = false; + field.style.width = 50; + field.isSortable = true; + field.search.row = 0; + dscr.addField(field); + + + + + + + CustomDatabaseComboField cdcf = new CustomDatabaseComboField(); + cdcf.visible = true; + cdcf.name = "Заведение"; + cdcf.db = "CID"; + cdcf.isEditable = true; + cdcf.style.width = 110; + cdcf.isMust = true; + cdcf.search.row = 1; + + if(application.isAdmin){ + } + else{ + cdcf.constraint.criteria.add(new Constraint.Criterion(MAbstractDataElement.F_OWNER_ID, application.UID)); + } + + dscr.addField(cdcf); + + + + + + +// CustomRelationField crf = new CustomRelationField(MCafe.class, "КАФЕ (ID)"); +// crf.visible = false; +// crf.name = "КАФЕ (ID)"; +// crf.db = "CID"; +// crf.isEditable = false; +// crf.style.width = 30; +// crf.isMust = true; +// crf.search.mode = CustomField.Search.SEARCH_MODES.INTEGER; +// crf.search.row = 1; +// dscr.addField(crf); +// +// +// +// +// crf = new CustomRelationField(MCafe.class, "КАФЕ (ID)"); +// crf.visible = true; +// crf.name = "Тип"; +// crf.db = "cafe_type"; +// crf.isEditable = false; +// crf.style.width = 100; +// crf.isMust = true; +// crf.search.mode = CustomField.Search.SEARCH_MODES.STRING; +// crf.search.row = 1; +// dscr.addField(crf); +// +// +// crf = new CustomRelationField(MCafe.class, "КАФЕ (ID)"); +// crf.visible = true; +// crf.name = "Кафе"; +// crf.db = "cafe_name"; +// crf.isEditable = false; +// crf.style.width = 150; +// crf.isMust = true; +// crf.search.mode = CustomField.Search.SEARCH_MODES.STRING; +// crf.search.row = 1; +// dscr.addField(crf); + + + + + + + CustomDatabaseComboField ccf = new CustomDatabaseComboField(); + ccf.visible = true; + ccf.name = "Категория"; + ccf.db = "category"; + ccf.isEditable = true; + ccf.style.width = 100; + ccf.isMust = true; + dscr.addField(ccf); + + + + + field = new CustomField(); + field.visible = true; + field.name = "Блюдо"; + field.db = "name"; + field.isEditable = true; + field.style.width = 150; + field.isMust = true; + field.search.mode = CustomField.Search.SEARCH_MODES.LOCALIZED_STRING; + dscr.addField(field); + + + + + + + + + field = new CustomField(); + field.visible = true; + //field.searchable = CustomField.SEARCH_MODES.INTEGER; + + field.name = "Описание"; + field.db = "description"; + field.isEditable = true; + field.style.width = 0; + field.search.mode = CustomField.Search.SEARCH_MODES.LOCALIZED_STRING; + dscr.addField(field); + + + + + + CustomImageField fieldImage = new CustomImageField(); + fieldImage.visible = true; + fieldImage.name = "Изображение"; + fieldImage.db = "image"; + fieldImage.isEditable = true; + fieldImage.style.width = 40; + fieldImage.style.height = 40; + fieldImage.isImageInTable = true; + dscr.addField(fieldImage); + + + + + + field = new CustomField(); + field.visible = true; + field.name = "Цена"; + field.db = "price"; + field.isEditable = true; + field.isMust = true; + field.style.width = 70; + field.search.mode = CustomField.Search.SEARCH_MODES.INTEGER; + field.search.row = 1; + dscr.addField(field); + + + + + field = new CustomField(); + field.visible = true; + field.name = "Кол-во/Объем"; + field.db = "weight2"; + field.isEditable = true; + field.isMust = true; + field.style.width = 70; + field.search.mode = CustomField.Search.SEARCH_MODES.NONE; + field.search.row = 1; + dscr.addField(field); + + + + field = new CustomField(); + field.visible = true; + field.name = "Доставка"; + field.db = "delivery"; + field.isEditable = true; + field.style.width = 60; + field.isSortable = true; + field.search.mode = CustomField.Search.SEARCH_MODES.BOOLEAN_ONLY_TRUE; + dscr.addField(field); + + + + + if(application.isAdmin){ + ccf = new CustomDatabaseComboField(); + ccf.visible = true; + ccf.name = "Владелец"; + ccf.db = MAbstractDataElement.F_OWNER_ID; + ccf.isEditable = true; + ccf.style.width = 120; + ccf.isMust = true; + //ccf.search.mode = CustomField.Search.SEARCH_MODES.NONE; + ccf.search.row = 2; + dscr.addField(ccf); + } + + + + + + + + CustomDateField dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "Создан"; + dateField.db = "created"; + dateField.isEditable = false; + dateField.style.width = 120; + dateField.isSortable = true; + dateField.search.mode = CustomField.Search.SEARCH_MODES.DATE_RANGE; + dateField.search.row = 2; + dscr.addField(dateField); + + + + + + dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "Обновлен"; + dateField.db = "updated"; + dateField.isEditable = false; + dateField.style.width = 120; + dateField.isSortable = true; + dateField.search.mode = CustomField.Search.SEARCH_MODES.DATE_RANGE; + dateField.search.row = 2; + dscr.addField(dateField); + + + + field = new CustomField(); + field.visible = true; + field.name = "Опубликовано"; + field.db = "published"; + field.isEditable = true; + field.style.width = 40; + field.isSortable = true; + field.search.mode = CustomField.Search.SEARCH_MODES.BOOLEAN_ONLY_TRUE; + field.search.row = 2; + dscr.addField(field); + + + + Constraint constraint = new Constraint(); + + + if(application.isAdmin){ + } + else{ + constraint.criteria.add(new Constraint.Criterion(MAbstractDataElement.F_OWNER_ID, application.UID)); + } + + + + DBListPanel panel = new DBListPanel(application, + MCourse.class, + dscr, + Dimension.getFull(application), + setMode, + constraint); + panel.addPanel(new ExtraPanelImageUploader(panel, fieldImage), false); + //panelCourse.addPanel(new ExtraPanelImageViewer(panelCourse, fieldImage, 50), true); + panel.addPanel(new ExtraPanelMany2Many(application, + "Ингредиенты ...", + MIngredient.class, + "ingredient", + AccessConstants.none(), + panel), false); + + + return panel; + } + + + + + + + + + + + + + public static CustomDescriptor buildSelector(){ + CustomDescriptor dscr = new CustomDescriptor(); + + CustomField field = new CustomField(); + field.visible = true; + field.search.mode = CustomField.Search.SEARCH_MODES.INTEGER; + field.name = "ID"; + field.db = "ID"; + field.isEditable = false; + field.style.width = 50; + field.isSortable = true; + field.search.row = 0; + dscr.addField(field); + + + + + CustomFixedComboField ccf = new CustomFixedComboField(); + ccf.visible = true; + ccf.name = "Категория"; + ccf.db = "category"; + ccf.isEditable = true; + ccf.style.width = 100; + ccf.isMust = true; + dscr.addField(ccf); + + + + + field = new CustomField(); + field.visible = true; + field.name = "Название"; + field.db = "name"; + field.isEditable = true; + field.style.width = 150; + field.isMust = true; + field.search.mode = CustomField.Search.SEARCH_MODES.LOCALIZED_STRING; + dscr.addField(field); + + + + + + + + + field = new CustomField(); + field.visible = true; + //field.searchable = CustomField.SEARCH_MODES.INTEGER; + + field.name = "Описание"; + field.db = "description"; + field.isEditable = true; + field.style.width = 0; + field.search.mode = CustomField.Search.SEARCH_MODES.LOCALIZED_STRING; + dscr.addField(field); + + + + + + CustomImageField fieldImage = new CustomImageField(); + fieldImage.visible = true; + fieldImage.name = "Изображение"; + fieldImage.db = "image"; + fieldImage.isEditable = true; + fieldImage.style.width = 40; + fieldImage.style.height = 40; + fieldImage.isImageInTable = true; + dscr.addField(fieldImage); + + + + field = new CustomField(); + field.visible = true; + field.name = "Цена"; + field.db = "price"; + field.isEditable = true; + field.isMust = true; + field.style.width = 70; + field.search.mode = CustomField.Search.SEARCH_MODES.INTEGER_RANGE; + field.search.row = 1; + dscr.addField(field); + + + + + + return dscr; + } + + + + + + + + + + + + + @Override + public DBSingle build(int ID){ + CustomDescriptor dscr = new CustomDescriptor(); + + CustomField field = new CustomField(); + field.visible = true; + field.search.mode = CustomField.Search.SEARCH_MODES.INTEGER; + field.name = "ID"; + field.db = "ID"; + field.isEditable = false; + field.style.width = 50; + field.isSortable = true; + field.search.row = 0; + dscr.addField(field); + + + + + + + CustomDatabaseComboField cdcf = new CustomDatabaseComboField(); + cdcf.visible = true; + cdcf.name = "Заведение"; + cdcf.db = "CID"; + cdcf.isEditable = true; + cdcf.style.width = 110; + cdcf.isMust = true; + cdcf.search.row = 1; + + if(application.isAdmin){ + } + else{ + cdcf.constraint.criteria.add(new Constraint.Criterion(MAbstractDataElement.F_OWNER_ID, application.UID)); + } + + dscr.addField(cdcf); + + + + + + +// CustomRelationField crf = new CustomRelationField(MCafe.class, "КАФЕ (ID)"); +// crf.visible = false; +// crf.name = "КАФЕ (ID)"; +// crf.db = "CID"; +// crf.isEditable = false; +// crf.style.width = 30; +// crf.isMust = true; +// crf.search.mode = CustomField.Search.SEARCH_MODES.INTEGER; +// crf.search.row = 1; +// dscr.addField(crf); +// +// +// +// +// crf = new CustomRelationField(MCafe.class, "КАФЕ (ID)"); +// crf.visible = true; +// crf.name = "Тип"; +// crf.db = "cafe_type"; +// crf.isEditable = false; +// crf.style.width = 100; +// crf.isMust = true; +// crf.search.mode = CustomField.Search.SEARCH_MODES.STRING; +// crf.search.row = 1; +// dscr.addField(crf); +// +// +// crf = new CustomRelationField(MCafe.class, "КАФЕ (ID)"); +// crf.visible = true; +// crf.name = "Кафе"; +// crf.db = "cafe_name"; +// crf.isEditable = false; +// crf.style.width = 150; +// crf.isMust = true; +// crf.search.mode = CustomField.Search.SEARCH_MODES.STRING; +// crf.search.row = 1; +// dscr.addField(crf); + + + + + + + CustomDatabaseComboField ccf = new CustomDatabaseComboField(); + ccf.visible = true; + ccf.name = "Категория"; + ccf.db = "category"; + ccf.isEditable = true; + ccf.style.width = 100; + ccf.isMust = true; + dscr.addField(ccf); + + + + + field = new CustomField(); + field.visible = true; + field.name = "Блюдо"; + field.db = "name"; + field.isEditable = true; + field.style.width = 150; + field.isMust = true; + field.search.mode = CustomField.Search.SEARCH_MODES.LOCALIZED_STRING; + dscr.addField(field); + + + + + + + + + field = new CustomField(); + field.visible = true; + //field.searchable = CustomField.SEARCH_MODES.INTEGER; + + field.name = "Описание"; + field.db = "description"; + field.isEditable = true; + field.style.width = 0; + field.search.mode = CustomField.Search.SEARCH_MODES.LOCALIZED_STRING; + dscr.addField(field); + + + + + + CustomImageField fieldImage = new CustomImageField(); + fieldImage.visible = true; + fieldImage.name = "Изображение"; + fieldImage.db = "image"; + fieldImage.isEditable = true; + fieldImage.style.width = 40; + fieldImage.style.height = 40; + fieldImage.isImageInTable = true; + dscr.addField(fieldImage); + + + + + + field = new CustomField(); + field.visible = true; + field.name = "Цена"; + field.db = "price"; + field.isEditable = true; + field.isMust = true; + field.style.width = 70; + field.search.mode = CustomField.Search.SEARCH_MODES.INTEGER; + field.search.row = 1; + dscr.addField(field); + + + + + field = new CustomField(); + field.visible = true; + field.name = "Кол-во/Объем"; + field.db = "weight2"; + field.isEditable = true; + field.isMust = true; + field.style.width = 70; + field.search.mode = CustomField.Search.SEARCH_MODES.NONE; + field.search.row = 1; + dscr.addField(field); + + + + field = new CustomField(); + field.visible = true; + field.name = "Доставка"; + field.db = "delivery"; + field.isEditable = true; + field.style.width = 60; + field.isSortable = true; + field.search.mode = CustomField.Search.SEARCH_MODES.BOOLEAN_ONLY_TRUE; + dscr.addField(field); + + + + + if(application.isAdmin){ + ccf = new CustomDatabaseComboField(); + ccf.visible = true; + ccf.name = "Владелец"; + ccf.db = MAbstractDataElement.F_OWNER_ID; + ccf.isEditable = true; + ccf.style.width = 120; + ccf.isMust = true; + //ccf.search.mode = CustomField.Search.SEARCH_MODES.NONE; + ccf.search.row = 2; + dscr.addField(ccf); + } + + + + + + + + CustomDateField dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "Создан"; + dateField.db = "created"; + dateField.isEditable = false; + dateField.style.width = 120; + dateField.isSortable = true; + dateField.search.mode = CustomField.Search.SEARCH_MODES.DATE_RANGE; + dateField.search.row = 2; + dscr.addField(dateField); + + + + + + dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "Обновлен"; + dateField.db = "updated"; + dateField.isEditable = false; + dateField.style.width = 120; + dateField.isSortable = true; + dateField.search.mode = CustomField.Search.SEARCH_MODES.DATE_RANGE; + dateField.search.row = 2; + dscr.addField(dateField); + + + + field = new CustomField(); + field.visible = true; + field.name = "Опубликовано"; + field.db = "published"; + field.isEditable = true; + field.style.width = 40; + field.isSortable = true; + field.search.mode = CustomField.Search.SEARCH_MODES.BOOLEAN_ONLY_TRUE; + field.search.row = 2; + dscr.addField(field); + + + DBSingle panel = new DBSingle(application, + MCourse.class, + ID, + dscr, + Dimension.getFull(application), + setMode + ); + + + return panel; + } + + +} + diff --git a/kz_cafe_admin/src/kz/cafe/admin/TabCourseCategory.java b/kz_cafe_admin/src/kz/cafe/admin/TabCourseCategory.java new file mode 100644 index 0000000..b6c7ddc --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/TabCourseCategory.java @@ -0,0 +1,280 @@ +package kz.cafe.admin; + +import java.util.*; +import kz.cafe.admin.constants.AccessConstants.EditMode; +import kz.cafe.admin.panel_extensions.*; +import kz.cafe.admin.panels.*; +import kz.cafe.admin.panels.model.*; +import kz.cafe.db.model.*; + + +public class TabCourseCategory extends AbstractTab{ + private static final long serialVersionUID = 3858820288786325093L; + + + + + + public TabCourseCategory(AdminMain application, Set setMode){ + super(application, setMode); + } + + + + + + @Override + public DBListPanel build(){ + CustomDescriptor dscr = new CustomDescriptor(); + + CustomField field = new CustomField(); + field.visible = true; + field.search.mode = CustomField.Search.SEARCH_MODES.INTEGER; + field.name = "ID"; + field.db = "ID"; + field.isEditable = false; + field.style.width = 50; + field.isSortable = true; + field.search.row = 0; + dscr.addField(field); + + + + field = new CustomField(); + field.visible = true; + field.name = "Название"; + field.db = "name"; + field.isEditable = true; + field.style.width = 150; + field.isMust = true; + field.search.mode = CustomField.Search.SEARCH_MODES.LOCALIZED_STRING; + dscr.addField(field); + + + + + + + + + field = new CustomField(); + field.visible = true; + //field.searchable = CustomField.SEARCH_MODES.INTEGER; + + field.name = "Описание"; + field.db = "description"; + field.isEditable = true; + field.style.width = 0; + field.search.mode = CustomField.Search.SEARCH_MODES.LOCALIZED_STRING; + dscr.addField(field); + + + + + + + + CustomImageField fieldImage = new CustomImageField(); + fieldImage.visible = true; + fieldImage.name = "Изображение"; + fieldImage.db = "image"; + fieldImage.isEditable = true; + fieldImage.style.width = 40; + fieldImage.style.height = 40; + fieldImage.isImageInTable = true; + dscr.addField(fieldImage); + + + + + + + + CustomDateField dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "Создан"; + dateField.db = "created"; + dateField.isEditable = false; + dateField.style.width = 120; + dateField.isSortable = true; + dateField.search.mode = CustomField.Search.SEARCH_MODES.DATE_RANGE; + dateField.search.row = 1; + dscr.addField(dateField); + + + + + + dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "Обновлен"; + dateField.db = "updated"; + dateField.isEditable = false; + dateField.style.width = 120; + dateField.isSortable = true; + dateField.search.mode = CustomField.Search.SEARCH_MODES.DATE_RANGE; + dateField.search.row = 1; + dscr.addField(dateField); + + + + field = new CustomField(); + field.visible = true; + field.name = "Опубликовано"; + field.db = "published"; + field.isEditable = true; + field.style.width = 40; + field.isSortable = true; + field.search.mode = CustomField.Search.SEARCH_MODES.BOOLEAN_ONLY_TRUE; + field.search.row = 1; + dscr.addField(field); + + + + + field = new CustomField(); + field.visible = true; + field.search.mode = CustomField.Search.SEARCH_MODES.INTEGER; + field.name = "Порядок"; + field.db = "order"; + field.isEditable = true; + field.style.width = 50; + field.isSortable = true; + field.style.expandable = false; + field.search.row = 0; + dscr.addField(field); + + + + + DBListPanel panel = + new DBListPanel(application, MCourseCategory.class, dscr, Dimension.getFull(application), setMode); + panel.addPanel(new ExtraPanelImageUploader(panel, fieldImage), false); + + return panel; + } + + + + + + @Override + public DBSingle build(int ID){ + CustomDescriptor dscr = new CustomDescriptor(); + + CustomField field = new CustomField(); + field.visible = true; + field.search.mode = CustomField.Search.SEARCH_MODES.INTEGER; + field.name = "ID"; + field.db = "ID"; + field.isEditable = false; + field.style.width = 50; + field.isSortable = true; + field.search.row = 0; + dscr.addField(field); + + + + field = new CustomField(); + field.visible = true; + field.name = "Название"; + field.db = "name"; + field.isEditable = true; + field.style.width = 150; + field.isMust = true; + field.search.mode = CustomField.Search.SEARCH_MODES.LOCALIZED_STRING; + dscr.addField(field); + + + + + + + + + field = new CustomField(); + field.visible = true; + //field.searchable = CustomField.SEARCH_MODES.INTEGER; + + field.name = "Описание"; + field.db = "description"; + field.isEditable = true; + field.style.width = 0; + field.search.mode = CustomField.Search.SEARCH_MODES.LOCALIZED_STRING; + dscr.addField(field); + + + + + + + + CustomImageField fieldImage = new CustomImageField(); + fieldImage.visible = true; + fieldImage.name = "Изображение"; + fieldImage.db = "image"; + fieldImage.isEditable = true; + fieldImage.style.width = 40; + fieldImage.style.height = 40; + fieldImage.isImageInTable = true; + dscr.addField(fieldImage); + + + + + + + + CustomDateField dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "Создан"; + dateField.db = "created"; + dateField.isEditable = false; + dateField.style.width = 120; + dateField.isSortable = true; + dateField.search.mode = CustomField.Search.SEARCH_MODES.DATE_RANGE; + dateField.search.row = 1; + dscr.addField(dateField); + + + + + + dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "Обновлен"; + dateField.db = "updated"; + dateField.isEditable = false; + dateField.style.width = 120; + dateField.isSortable = true; + dateField.search.mode = CustomField.Search.SEARCH_MODES.DATE_RANGE; + dateField.search.row = 1; + dscr.addField(dateField); + + + + field = new CustomField(); + field.visible = true; + field.name = "Опубликовано"; + field.db = "published"; + field.isEditable = true; + field.style.width = 40; + field.isSortable = true; + field.search.mode = CustomField.Search.SEARCH_MODES.BOOLEAN_ONLY_TRUE; + field.search.row = 1; + dscr.addField(field); + + + + DBSingle panel = new DBSingle(application, + MCourseCategory.class, + ID, + dscr, + Dimension.getFull(application), + setMode + ); + + return panel; + } +} + diff --git a/kz_cafe_admin/src/kz/cafe/admin/TabCuisine.java b/kz_cafe_admin/src/kz/cafe/admin/TabCuisine.java new file mode 100644 index 0000000..c424119 --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/TabCuisine.java @@ -0,0 +1,159 @@ +package kz.cafe.admin; + +import java.util.*; +import kz.cafe.admin.constants.AccessConstants.EditMode; +import kz.cafe.admin.panel_extensions.*; +import kz.cafe.admin.panels.*; +import kz.cafe.admin.panels.model.*; +import kz.cafe.db.model.*; + + +public class TabCuisine extends AbstractTab{ + private static final long serialVersionUID = -5281394170937761954L; + + + + + public TabCuisine(AdminMain application, Set setMode){ + super(application, setMode); + } + + + + + @Override + public DBListPanel build(){ + CustomDescriptor dscr = new CustomDescriptor(); + + CustomField field = new CustomField(); + field.visible = true; + field.search.mode = CustomField.Search.SEARCH_MODES.INTEGER; + field.name = "ID"; + field.db = "ID"; + field.isEditable = false; + field.style.width = 50; + field.isSortable = true; + field.search.row = 0; + dscr.addField(field); + + + + field = new CustomField(); + field.visible = true; + field.name = "Название"; + field.db = "name"; + field.isEditable = true; + field.style.width = 150; + field.isMust = true; + field.search.mode = CustomField.Search.SEARCH_MODES.LOCALIZED_STRING; + dscr.addField(field); + + + + + + + + + field = new CustomField(); + field.visible = true; + //field.searchable = CustomField.SEARCH_MODES.INTEGER; + + field.name = "Описание"; + field.db = "description"; + field.isEditable = true; + field.style.width = 0; + field.search.mode = CustomField.Search.SEARCH_MODES.LOCALIZED_STRING; + dscr.addField(field); + + + + + CustomImageField fieldImage = new CustomImageField(); + fieldImage.visible = true; + fieldImage.name = "Изображение"; + fieldImage.db = "image"; + fieldImage.isEditable = true; + fieldImage.style.width = 40; + fieldImage.style.height = 40; + fieldImage.isImageInTable = true; + dscr.addField(fieldImage); + + + + + + + + CustomDateField dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "Создан"; + dateField.db = "created"; + dateField.isEditable = false; + dateField.style.width = 120; + dateField.isSortable = true; + dateField.search.mode = CustomField.Search.SEARCH_MODES.DATE_RANGE; + dateField.search.row = 1; + dscr.addField(dateField); + + + + + + dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "Обновлен"; + dateField.db = "updated"; + dateField.isEditable = false; + dateField.style.width = 120; + dateField.isSortable = true; + dateField.search.mode = CustomField.Search.SEARCH_MODES.DATE_RANGE; + dateField.search.row = 1; + dscr.addField(dateField); + + + + field = new CustomField(); + field.visible = true; + field.name = "Опубликовано"; + field.db = "published"; + field.isEditable = true; + field.style.width = 40; + field.isSortable = true; + field.search.mode = CustomField.Search.SEARCH_MODES.BOOLEAN_ONLY_TRUE; + field.search.row = 1; + dscr.addField(field); + + + + field = new CustomField(); + field.visible = true; + field.search.mode = CustomField.Search.SEARCH_MODES.INTEGER; + field.name = "Порядок"; + field.db = "order"; + field.isEditable = true; + field.style.width = 50; + field.isSortable = true; + field.style.expandable = false; + field.search.row = 0; + dscr.addField(field); + + + + DBListPanel panel = new DBListPanel(application, MCuisine.class, dscr, Dimension.getFull(application), setMode); + panel.addPanel(new ExtraPanelImageUploader(panel, (CustomImageField) dscr.mapDBFields.get("image")), false); + //panelCourse.addPanel(new ExtraPanelImageViewer(panelCourse, fieldImage, 50), true); + + return panel; + } + + + + + @Override + public DBSingle build(int ID){ + // TODO Auto-generated method stub + return null; + } +} + diff --git a/kz_cafe_admin/src/kz/cafe/admin/TabFaceControl.java b/kz_cafe_admin/src/kz/cafe/admin/TabFaceControl.java new file mode 100644 index 0000000..c688f5b --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/TabFaceControl.java @@ -0,0 +1,159 @@ +package kz.cafe.admin; + +import java.util.*; +import kz.cafe.admin.constants.AccessConstants.EditMode; +import kz.cafe.admin.panel_extensions.*; +import kz.cafe.admin.panels.*; +import kz.cafe.admin.panels.model.*; +import kz.cafe.db.model.*; + + +public class TabFaceControl extends AbstractTab{ + private static final long serialVersionUID = -5281394170937761954L; + + + + + public TabFaceControl(AdminMain application, Set setMode){ + super(application, setMode); + } + + + + + @Override + public DBListPanel build(){ + CustomDescriptor dscr = new CustomDescriptor(); + + CustomField field = new CustomField(); + field.visible = true; + field.search.mode = CustomField.Search.SEARCH_MODES.INTEGER; + field.name = "ID"; + field.db = "ID"; + field.isEditable = false; + field.style.width = 50; + field.isSortable = true; + field.search.row = 0; + dscr.addField(field); + + + + field = new CustomField(); + field.visible = true; + field.name = "Название"; + field.db = "name"; + field.isEditable = true; + field.style.width = 150; + field.isMust = true; + field.search.mode = CustomField.Search.SEARCH_MODES.LOCALIZED_STRING; + dscr.addField(field); + + + + + + + + + field = new CustomField(); + field.visible = true; + //field.searchable = CustomField.SEARCH_MODES.INTEGER; + + field.name = "Описание"; + field.db = "description"; + field.isEditable = true; + field.style.width = 0; + field.search.mode = CustomField.Search.SEARCH_MODES.LOCALIZED_STRING; + dscr.addField(field); + + + + + CustomImageField fieldImage = new CustomImageField(); + fieldImage.visible = true; + fieldImage.name = "Изображение"; + fieldImage.db = "image"; + fieldImage.isEditable = true; + fieldImage.style.width = 40; + fieldImage.style.height = 40; + fieldImage.isImageInTable = true; + dscr.addField(fieldImage); + + + + + + + + CustomDateField dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "Создан"; + dateField.db = "created"; + dateField.isEditable = false; + dateField.style.width = 120; + dateField.isSortable = true; + dateField.search.mode = CustomField.Search.SEARCH_MODES.DATE_RANGE; + dateField.search.row = 1; + dscr.addField(dateField); + + + + + + dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "Обновлен"; + dateField.db = "updated"; + dateField.isEditable = false; + dateField.style.width = 120; + dateField.isSortable = true; + dateField.search.mode = CustomField.Search.SEARCH_MODES.DATE_RANGE; + dateField.search.row = 1; + dscr.addField(dateField); + + + + field = new CustomField(); + field.visible = true; + field.name = "Опубликовано"; + field.db = "published"; + field.isEditable = true; + field.style.width = 40; + field.isSortable = true; + field.search.mode = CustomField.Search.SEARCH_MODES.BOOLEAN_ONLY_TRUE; + field.search.row = 1; + dscr.addField(field); + + + + field = new CustomField(); + field.visible = true; + field.search.mode = CustomField.Search.SEARCH_MODES.INTEGER; + field.name = "Порядок"; + field.db = "order"; + field.isEditable = true; + field.style.width = 50; + field.isSortable = true; + field.style.expandable = false; + field.search.row = 0; + dscr.addField(field); + + + + DBListPanel panel = new DBListPanel(application, MFaceControl.class, dscr, Dimension.getFull(application), setMode); + panel.addPanel(new ExtraPanelImageUploader(panel, (CustomImageField) dscr.mapDBFields.get("image")), false); + //panelCourse.addPanel(new ExtraPanelImageViewer(panelCourse, fieldImage, 50), true); + + return panel; + } + + + + + @Override + public DBSingle build(int ID){ + // TODO Auto-generated method stub + return null; + } +} + diff --git a/kz_cafe_admin/src/kz/cafe/admin/TabFeedback.java b/kz_cafe_admin/src/kz/cafe/admin/TabFeedback.java new file mode 100644 index 0000000..520fd23 --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/TabFeedback.java @@ -0,0 +1,480 @@ +package kz.cafe.admin; + +import java.util.*; +import com.vaadin.data.*; +import com.vaadin.ui.*; +import kz.cafe.admin.constants.AccessConstants.EditMode; +import kz.cafe.admin.hooks.*; +import kz.cafe.admin.panels.*; +import kz.cafe.admin.panels.model.*; +import kz.cafe.constants.*; +import kz.cafe.db.*; +import kz.cafe.db.model.*; + +/** + * Main application class. + */ +public class TabFeedback extends AbstractTab{ + private static final long serialVersionUID = -7440565419856388384L; + + + + + public TabFeedback(AdminMain application, Set setMode){ + super(application, setMode); + } + + + + + @Override + public DBListPanel build(){ + CustomDescriptor dscr = new CustomDescriptor(); + + CustomField field = new CustomField(); + field.visible = true; + field.search.mode = CustomField.Search.SEARCH_MODES.INTEGER; + field.name = "ID"; + field.db = "ID"; + field.isEditable = false; + field.style.width = 50; + field.isSortable = true; + field.search.row = 0; + dscr.addField(field); + + + + + + + CustomFixedComboField crf = new CustomFixedComboField(); + crf.visible = true; + crf.name = "Объект"; + crf.db = "CID"; + crf.isEditable = true; + crf.style.width = 110; + crf.isMust = true; + crf.search.row = 1; + dscr.addField(crf); + + + + + + + + + CustomFixedComboField ccf = new CustomFixedComboField(); + ccf.type = CustomFixedComboField.TYPE.IMAGE; + ccf.visible = true; + ccf.name = "Звезд"; + ccf.db = "rate"; + ccf.isEditable = true; + ccf.style.width = 60; + ccf.add(new CustomFixedComboField.Element(0, "нет", "")); + ccf.add(new CustomFixedComboField.Element(1, "1", "")); + ccf.add(new CustomFixedComboField.Element(2, "2", "")); + ccf.add(new CustomFixedComboField.Element(3, "3", "")); + ccf.add(new CustomFixedComboField.Element(4, "4", "")); + ccf.add(new CustomFixedComboField.Element(5, "5", "")); + ccf.isMust = false; + dscr.addField(ccf); + + + + field = new CustomField(); + field.visible = true; + field.name = "Заголовок"; + field.db = "title"; + field.isEditable = true; + field.style.width = 300; + field.isMust = false; + field.search.mode = CustomField.Search.SEARCH_MODES.LOCALIZED_STRING; + dscr.addField(field); + + + + field = new CustomField(); + field.visible = true; + field.name = "Отзыв"; + field.db = "text"; + field.isEditable = true; + field.style.width = 0; + field.isMust = false; + field.search.mode = CustomField.Search.SEARCH_MODES.LOCALIZED_STRING; + dscr.addField(field); + + + + + + ccf = new CustomFixedComboField(); + ccf.visible = true; + ccf.name = "Автор"; + ccf.db = "UID"; + ccf.isEditable = true; + ccf.style.width = 120; + ccf.isMust = true; + dscr.addField(ccf); + + + + + + + CustomDateField dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "Создан"; + dateField.db = "created"; + dateField.isEditable = false; + dateField.style.width = 120; + dateField.isSortable = true; + dateField.search.mode = CustomField.Search.SEARCH_MODES.DATE_RANGE; + dateField.search.row = 1; + dscr.addField(dateField); + + + + + + dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "Обновлен"; + dateField.db = "updated"; + dateField.isEditable = false; + dateField.style.width = 120; + dateField.isSortable = true; + dateField.search.mode = CustomField.Search.SEARCH_MODES.DATE_RANGE; + dateField.search.row = 1; + dscr.addField(dateField); + + + + final CustomField fieldPublished = new CustomField(); + fieldPublished.visible = true; + fieldPublished.name = "Опубликован"; + fieldPublished.db = "published"; + fieldPublished.isEditable = true; + fieldPublished.style.width = 80; + fieldPublished.isSortable = true; + fieldPublished.search.mode = CustomField.Search.SEARCH_MODES.BOOLEAN_ONLY_TRUE; + fieldPublished.search.row = 1; + dscr.addField(fieldPublished); + + + Constraint constraint = new Constraint(); + + + if(application.isAdmin){ + } + else{ + constraint.criteria.add(new Constraint.Criterion(MUser.F_OWNER_ID, application.UID)); + } + + + + final DBListPanel panel = new DBListPanel(application, + MFeedback.class, + dscr, + Dimension.getFull(application), + setMode, + constraint, + new Order(Order.CREATER, + fieldPublished.db, + fieldPublished.name)); + //panel.addPanel(new ExtraPanelImageUploader(panel, fieldImage), false); + //panelCourse.addPanel(new ExtraPanelImageViewer(panelCourse, fieldImage, 50), true); + + + + panel.table.setCellStyleGenerator(new Table.CellStyleGenerator(){ + private static final long serialVersionUID = -6586615471330221828L; + + @Override + public String getStyle(Object itemId, Object propertyId){ + if(propertyId == null){ + // Styling for row + + + Item item = panel.table.getItem(itemId); + boolean isProcessed = (Boolean) item.getItemProperty(fieldPublished.name).getValue(); + + if(isProcessed){ + } + else{ + return "highlight-stressed"; + } +// if(firstName.toLowerCase().startsWith("g")){ +// return "highlight-green"; +// } +// else if(firstName.contains("o")){ +// return "highlight-red"; +// } +// else{ +// return null; +// } + + + if(panel.setBlockedRecords.contains(itemId)){ + return "highlight-blocked"; + } + else{ + return null; + } + + } + else{ + // styling for column propertyId + return null; + } + } + }); + + + panel.hookDelete(new FeedbackHook()); + panel.hookAdd(new FeedbackHook()); + panel.hookEdit(new FeedbackHook()); + panel.hookUndelete(new FeedbackHook()); + + return panel; + } + + + + + + + + + + + + + + public static CustomDescriptor buildDescriptor(AdminMain application){ + CustomDescriptor dscr = new CustomDescriptor(); + + CustomField field = new CustomField(); + field.visible = true; + field.search.mode = CustomField.Search.SEARCH_MODES.INTEGER; + field.name = "ID"; + field.db = "ID"; + field.isEditable = false; + field.style.width = 50; + field.isSortable = true; + field.search.row = 0; + dscr.addField(field); + + + + + + CustomFixedComboField ccf = new CustomFixedComboField(); + ccf.visible = true; + ccf.name = "Автор"; + ccf.db = "UID"; + ccf.isEditable = true; + ccf.style.width = 120; + ccf.isMust = true; + dscr.addField(ccf); + + + + + + + + + ccf = new CustomFixedComboField(); + ccf.type = CustomFixedComboField.TYPE.IMAGE; + ccf.visible = true; + ccf.name = "Звезд"; + ccf.db = "rate"; + ccf.isEditable = true; + ccf.style.width = 60; + ccf.add(new CustomFixedComboField.Element(0, "1", "")); + ccf.add(new CustomFixedComboField.Element(1, "2", "")); + ccf.add(new CustomFixedComboField.Element(2, "3", "")); + ccf.add(new CustomFixedComboField.Element(3, "4", "")); + ccf.add(new CustomFixedComboField.Element(4, "5", "")); + ccf.isMust = true; + dscr.addField(ccf); + + + + + field = new CustomField(); + field.visible = true; + field.name = "Отзыв"; + field.db = "text"; + field.isEditable = true; + field.style.width = 0; + field.isMust = true; + field.search.mode = CustomField.Search.SEARCH_MODES.LOCALIZED_STRING; + dscr.addField(field); + + + + + return dscr; + } + + + + + + + + @Override + public DBSingle build(int ID){ + CustomDescriptor dscr = new CustomDescriptor(); + + CustomField field = new CustomField(); + field.visible = true; + field.search.mode = CustomField.Search.SEARCH_MODES.INTEGER; + field.name = "ID"; + field.db = "ID"; + field.isEditable = false; + field.style.width = 50; + field.isSortable = true; + field.search.row = 0; + dscr.addField(field); + + + + + + + CustomFixedComboField crf = new CustomFixedComboField(); + crf.visible = true; + crf.name = "Объект"; + crf.db = "CID"; + crf.isEditable = true; + crf.style.width = 110; + crf.isMust = true; + crf.search.row = 1; + dscr.addField(crf); + + + + + + + + + CustomFixedComboField ccf = new CustomFixedComboField(); + ccf.type = CustomFixedComboField.TYPE.IMAGE; + ccf.visible = true; + ccf.name = "Звезд"; + ccf.db = "rate"; + ccf.isEditable = true; + ccf.style.width = 60; + ccf.add(new CustomFixedComboField.Element(0, "нет", "")); + ccf.add(new CustomFixedComboField.Element(1, "1", "")); + ccf.add(new CustomFixedComboField.Element(2, "2", "")); + ccf.add(new CustomFixedComboField.Element(3, "3", "")); + ccf.add(new CustomFixedComboField.Element(4, "4", "")); + ccf.add(new CustomFixedComboField.Element(5, "5", "")); + ccf.isMust = false; + dscr.addField(ccf); + + + + + field = new CustomField(); + field.visible = true; + field.name = "Отзыв"; + field.db = "text"; + field.isEditable = true; + field.style.width = 0; + field.isMust = false; + field.search.mode = CustomField.Search.SEARCH_MODES.LOCALIZED_STRING; + dscr.addField(field); + + + + + + ccf = new CustomFixedComboField(); + ccf.visible = true; + ccf.name = "Автор"; + ccf.db = "UID"; + ccf.isEditable = true; + ccf.style.width = 120; + ccf.isMust = true; + dscr.addField(ccf); + + + + + + + CustomDateField dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "Создан"; + dateField.db = "created"; + dateField.isEditable = false; + dateField.style.width = 120; + dateField.isSortable = true; + dateField.search.mode = CustomField.Search.SEARCH_MODES.DATE_RANGE; + dateField.search.row = 1; + dscr.addField(dateField); + + + + + + dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "Обновлен"; + dateField.db = "updated"; + dateField.isEditable = false; + dateField.style.width = 120; + dateField.isSortable = true; + dateField.search.mode = CustomField.Search.SEARCH_MODES.DATE_RANGE; + dateField.search.row = 1; + dscr.addField(dateField); + + + + field = new CustomField(); + field.visible = true; + field.name = "Опубликован"; + field.db = "published"; + field.isEditable = true; + field.style.width = 80; + field.isSortable = true; + field.search.mode = CustomField.Search.SEARCH_MODES.BOOLEAN_ONLY_TRUE; + field.search.row = 1; + dscr.addField(field); + + + Constraint constraint = new Constraint(); + + + if(application.isAdmin){ + } + else{ + constraint.criteria.add(new Constraint.Criterion(MUser.F_OWNER_ID, application.UID)); + } + + + + + DBSingle panel = new DBSingle(application, + MFeedback.class, + ID, + dscr, + Dimension.get80(application), + setMode + ); + + + //panel.addPanel(new ExtraPanelImageUploader(panel, fieldImage), false); + //panelCourse.addPanel(new ExtraPanelImageViewer(panelCourse, fieldImage, 50), true); + + + return panel; + } +} + diff --git a/kz_cafe_admin/src/kz/cafe/admin/TabI18NClient.java b/kz_cafe_admin/src/kz/cafe/admin/TabI18NClient.java new file mode 100644 index 0000000..59ba19d --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/TabI18NClient.java @@ -0,0 +1,128 @@ +package kz.cafe.admin; + +import java.util.*; +import kz.cafe.admin.constants.AccessConstants.EditMode; +import kz.cafe.admin.panels.*; +import kz.cafe.admin.panels.model.*; +import kz.cafe.db.model.*; + +public class TabI18NClient extends AbstractTab{ + private static final long serialVersionUID = -6038765620012650256L; + + + + + public TabI18NClient(AdminMain application, Set setMode){ + super(application, setMode); + } + + + + + @Override + public DBListPanel build(){ + CustomDescriptor dscr = new CustomDescriptor(); + + CustomField field = new CustomField(); + field.visible = true; + field.search.mode = CustomField.Search.SEARCH_MODES.INTEGER; + field.name = "ID"; + field.db = "ID"; + field.isEditable = false; + field.style.width = 50; + field.isSortable = true; + field.search.row = 0; + dscr.addField(field); + + + + + field = new CustomField(); + field.visible = true; + field.name = "Название"; + field.db = "name"; + field.isEditable = true; + field.style.width = 200; + field.isMust = true; + field.search.mode = CustomField.Search.SEARCH_MODES.LOCALIZED_STRING; + dscr.addField(field); + + + + + + +// field = new CustomField(); +// field.visible = true; +// field.name = "Описание"; +// field.db = "description"; +// field.isEditable = true; +// field.style.width = 0; +// field.search.mode = CustomField.Search.SEARCH_MODES.LOCALIZED_STRING; +// field.search.row = 0; +// dscr.addField(field); + + + + + field = new CustomField(); + field.visible = true; + field.name = "Текст"; + field.db = "description"; + field.isEditable = true; + field.style.width = 0; + field.search.mode = CustomField.Search.SEARCH_MODES.LOCALIZED_STRING; + field.search.row = 0; + dscr.addField(field); + + + + field = new CustomField(); + field.visible = true; + field.name = "Опубликовано"; + field.db = "published"; + field.isEditable = true; + field.style.width = 50; + field.isSortable = true; + field.search.mode = CustomField.Search.SEARCH_MODES.BOOLEAN_ONLY_TRUE; + field.search.row = 3; + dscr.addField(field); + + + +// CustomImageField fieldLogo = new CustomImageField(); +// fieldLogo.visible = true; +// fieldLogo.name = "Изображение"; +// fieldLogo.db = "image"; +// fieldLogo.isEditable = true; +// fieldLogo.style.width = 40; +// fieldLogo.style.height = 40; +// fieldLogo.isImageInTable = true; +// dscr.addField(fieldLogo); + + + + + DBListPanel panel = new DBListPanel(application, + MI18NClient.class, + dscr, + Dimension.getFull(application), + setMode); +// panel.addPanel(new ExtraPanelImageUploader(panel, fieldLogo), false); + + + return panel; + } + + + + + + + @Override + public DBSingle build(int ID){ + // TODO Auto-generated method stub + return null; + } +} + diff --git a/kz_cafe_admin/src/kz/cafe/admin/TabImages.java b/kz_cafe_admin/src/kz/cafe/admin/TabImages.java new file mode 100644 index 0000000..5794c5e --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/TabImages.java @@ -0,0 +1,183 @@ +package kz.cafe.admin; + +import java.util.*; +import kz.cafe.admin.constants.AccessConstants.EditMode; +import kz.cafe.admin.panel_extensions.*; +import kz.cafe.admin.panels.*; +import kz.cafe.admin.panels.model.*; +import kz.cafe.db.*; +import kz.cafe.db.Constraint.Criterion; +import kz.cafe.db.model.*; + +/** + * Main application class. + */ +public class TabImages extends AbstractTab{ + private static final long serialVersionUID = -8310614426300855023L; + + + + + public TabImages(AdminMain application, Set setMode){ + super(application, setMode); + } + + + + + @Override + public DBListPanel build(){ + CustomDescriptor dscr = new CustomDescriptor(); + + CustomField field = new CustomField(); + field.visible = true; + field.search.mode = CustomField.Search.SEARCH_MODES.INTEGER; + field.name = "ID"; + field.db = "ID"; + field.isEditable = false; + field.style.width = 50; + field.isSortable = true; + field.search.row = 0; + dscr.addField(field); + + + CustomImageField fieldLogo = new CustomImageField(); + fieldLogo.visible = true; + fieldLogo.name = "Изображение"; + fieldLogo.db = "image"; + fieldLogo.isEditable = true; + fieldLogo.style.width = 110; + fieldLogo.style.height = 80; + fieldLogo.isImageInTable = true; + dscr.addField(fieldLogo); + + + + + field = new CustomField(); + field.visible = true; + field.name = "Название"; + field.db = "name"; + field.isEditable = true; + field.style.width = 200; + field.isMust = true; + field.search.mode = CustomField.Search.SEARCH_MODES.LOCALIZED_STRING; + dscr.addField(field); + + + + + field = new CustomField(); + field.visible = true; + field.name = "Описание"; + field.db = "description"; + field.isEditable = true; + field.style.width = 0; + field.search.mode = CustomField.Search.SEARCH_MODES.LOCALIZED_STRING; + field.search.row = 0; + dscr.addField(field); + + + + + + if(application.isAdmin){ + CustomFixedComboField ccf = new CustomFixedComboField(); + ccf.visible = true; + ccf.name = "Владелец"; + ccf.db = MAbstractDataElement.F_OWNER_ID; + ccf.isEditable = true; + ccf.style.width = 120; + ccf.isMust = true; + //ccf.search.mode = CustomField.Search.SEARCH_MODES.NONE; + ccf.search.row = 2; + dscr.addField(ccf); + } + + + + + + + CustomDatabaseComboField ccf = new CustomDatabaseComboField(); + ccf.visible = true; + ccf.name = "Объект"; + ccf.db = "CID"; + ccf.isEditable = true; + ccf.style.width = 100; + ccf.isMust = true; + ccf.search.row = 1; + + if(application.isAdmin){ + } + else{ + //Let's show only our objects + ccf.constraint.criteria.add(new Criterion(MAbstractDataElement.F_OWNER_ID, application.UID)); + } + dscr.addField(ccf); + + + + + + + field = new CustomField(); + field.visible = true; + field.name = "Опубликовано"; + field.db = "published"; + field.isEditable = true; + field.style.width = 40; + field.isSortable = true; + field.search.mode = CustomField.Search.SEARCH_MODES.BOOLEAN_ONLY_TRUE; + field.search.row = 1; + dscr.addField(field); + + + + field = new CustomField(); + field.visible = true; + field.search.mode = CustomField.Search.SEARCH_MODES.INTEGER; + field.name = "Порядок"; + field.db = "order"; + field.isEditable = true; + field.style.width = 50; + field.isSortable = true; + field.style.expandable = false; + field.search.row = 0; + dscr.addField(field); + + + + Constraint constraint = new Constraint(); + + if(application.isAdmin){ + } + else{ + constraint.criteria.add(new Constraint.Criterion(MUser.F_OWNER_ID, application.UID)); + } + + + + DBListPanel panel = new DBListPanel(application, + MCafeImage.class, + dscr, + Dimension.getFull(application), + setMode, + constraint); + panel.addPanel(new ExtraPanelImageUploader(panel, fieldLogo), false); +// panel.addPanel(new ExtraPanelMany2Many(application, "Проходит в ...", MCafe.class, new HashSet(), ViewConstants.EditMode.NONE, panel), false); + + + return panel; + } + + + + @Override + public DBSingle build(int ID){ + // TODO Auto-generated method stub + return null; + } + +} + diff --git a/kz_cafe_admin/src/kz/cafe/admin/TabIngredient.java b/kz_cafe_admin/src/kz/cafe/admin/TabIngredient.java new file mode 100644 index 0000000..7b1edc8 --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/TabIngredient.java @@ -0,0 +1,146 @@ +package kz.cafe.admin; + +import java.util.*; +import kz.cafe.admin.constants.AccessConstants.EditMode; +import kz.cafe.admin.panel_extensions.*; +import kz.cafe.admin.panels.*; +import kz.cafe.admin.panels.model.*; +import kz.cafe.db.model.*; + + +public class TabIngredient extends AbstractTab{ + private static final long serialVersionUID = 9207063012056667526L; + + + + + + public TabIngredient(AdminMain application, Set setMode){ + super(application, setMode); + } + + + + + @Override + public DBListPanel build(){ + CustomDescriptor dscr = new CustomDescriptor(); + + CustomField field = new CustomField(); + field.visible = true; + field.search.mode = CustomField.Search.SEARCH_MODES.INTEGER; + field.name = "ID"; + field.db = "ID"; + field.isEditable = false; + field.style.width = 50; + field.isSortable = true; + field.search.row = 0; + dscr.addField(field); + + + + field = new CustomField(); + field.visible = true; + field.name = "Название"; + field.db = "name"; + field.isEditable = true; + field.style.width = 150; + field.isMust = true; + field.search.mode = CustomField.Search.SEARCH_MODES.LOCALIZED_STRING; + dscr.addField(field); + + + + + + + + + field = new CustomField(); + field.visible = true; + //field.searchable = CustomField.SEARCH_MODES.INTEGER; + + field.name = "Описание"; + field.db = "description"; + field.isEditable = true; + field.style.width = 0; + field.search.mode = CustomField.Search.SEARCH_MODES.LOCALIZED_STRING; + dscr.addField(field); + + + + + CustomImageField fieldImage = new CustomImageField(); + fieldImage.visible = true; + fieldImage.name = "Изображение"; + fieldImage.db = MAbstractDescriptor.F_IMAGE; + fieldImage.isEditable = true; + fieldImage.style.width = 55; + fieldImage.style.height = 55; + fieldImage.isImageInTable = false; + dscr.addField(fieldImage); + + + + + + + + CustomDateField dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "Создан"; + dateField.db = "created"; + dateField.isEditable = false; + dateField.style.width = 120; + dateField.isSortable = true; + dateField.search.mode = CustomField.Search.SEARCH_MODES.DATE_RANGE; + dateField.search.row = 1; + dscr.addField(dateField); + + + + + + dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "Обновлен"; + dateField.db = "updated"; + dateField.isEditable = false; + dateField.style.width = 120; + dateField.isSortable = true; + dateField.search.mode = CustomField.Search.SEARCH_MODES.DATE_RANGE; + dateField.search.row = 1; + dscr.addField(dateField); + + + + field = new CustomField(); + field.visible = true; + field.name = "Опубликовано"; + field.db = "published"; + field.isEditable = true; + field.style.width = 40; + field.isSortable = true; + field.search.mode = CustomField.Search.SEARCH_MODES.BOOLEAN_ONLY_TRUE; + field.search.row = 1; + dscr.addField(field); + + + DBListPanel panel = new DBListPanel(application, MIngredient.class, dscr, Dimension.getFull(application), setMode); + panel.addPanel(new ExtraPanelImageUploader(panel, (CustomImageField) dscr.mapDBFields.get(MAbstractDescriptor.F_IMAGE)), false); + panel.addPanel(new ExtraPanelImageViewer(panel, fieldImage, fieldImage.style.height), true); + + return panel; + } + + + + + + @Override + public DBSingle build(int ID){ + // TODO Auto-generated method stub + return null; + } +} + diff --git a/kz_cafe_admin/src/kz/cafe/admin/TabLog.java b/kz_cafe_admin/src/kz/cafe/admin/TabLog.java new file mode 100644 index 0000000..ff1794b --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/TabLog.java @@ -0,0 +1,237 @@ +package kz.cafe.admin; + +import java.util.*; +import kz.cafe.admin.constants.AccessConstants.EditMode; +import kz.cafe.admin.panels.*; +import kz.cafe.admin.panels.model.*; +import kz.cafe.db.model.*; + +/** + * Main application class. + */ +public class TabLog extends AbstractTab{ + private static final long serialVersionUID = -6573713082176493774L; + + + + + public TabLog(AdminMain application, Set setMode){ + super(application, setMode); + } + + + + + @Override + public DBListPanel build(){ + CustomDescriptor dscr = new CustomDescriptor(); + + + + CustomField field = new CustomField(); + field.visible = true; + field.search.mode = CustomField.Search.SEARCH_MODES.INTEGER; + field.name = "ID"; + field.db = "ID"; + field.isEditable = false; + field.style.width = 50; + field.isSortable = true; + field.search.row = 0; + dscr.addField(field); + + + + CustomDateField dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "Дата"; + dateField.db = "created"; + dateField.isEditable = false; + dateField.style.width = 120; + dateField.isSortable = true; + dateField.search.mode = CustomField.Search.SEARCH_MODES.DATE_RANGE; + dateField.search.row = 2; + dscr.addField(dateField); + + + + + field = new CustomField(); + field.visible = true; + field.name = "Экран"; + field.db = "screen"; + field.isEditable = true; + field.style.width = 100; + field.isMust = true; + field.search.mode = CustomField.Search.SEARCH_MODES.STRING; + dscr.addField(field); + + + + + CustomRelationFieldFlexable crff = new CustomRelationFieldFlexable("Класс объекта", "Объект (ID)"); + crff.visible = false; + crff.name = "Объект (ID)"; + crff.db = "OID"; + crff.isEditable = true; + crff.style.width = 30; + crff.isMust = true; + crff.search.mode = CustomField.Search.SEARCH_MODES.INTEGER; + crff.search.row = 1; + dscr.addField(crff); + + + + + crff = new CustomRelationFieldFlexable("Класс объекта", "Объект (ID)"); + crff.visible = false; + crff.name = "Класс объекта"; + crff.db = "relatedClass"; + crff.isEditable = true; + crff.style.width = 50; + crff.isMust = true; + crff.search.mode = CustomField.Search.SEARCH_MODES.STRING; + crff.search.row = 1; + dscr.addField(crff); + + + + crff = new CustomRelationFieldFlexable("Класс объекта", "Объект (ID)"); + crff.visible = true; + crff.name = "Объект"; + crff.db = "object"; + crff.isEditable = true; + crff.style.width = 200; + crff.isMust = true; + crff.search.mode = CustomField.Search.SEARCH_MODES.STRING; + crff.search.row = 1; + dscr.addField(crff); + + + + + + + field = new CustomField(); + field.visible = true; + field.name = "Поле"; + field.db = "name"; + field.isEditable = true; + field.style.width = 100; + field.isMust = true; + field.search.mode = CustomField.Search.SEARCH_MODES.STRING; + dscr.addField(field); + + + + + + + CustomFixedComboField ccf = new CustomFixedComboField(); + ccf.visible = true; + ccf.name = "Изменил"; + ccf.db = "UID"; + ccf.isEditable = false; + ccf.style.width = 120; + ccf.isMust = true; + //ccf.search.mode = CustomField.Search.SEARCH_MODES.NONE; + ccf.search.row = 2; + dscr.addField(ccf); + + + + + + +// CustomRelationField crf = new CustomRelationField(MUser.class, "Пользователь (ID)"); +// crf.visible = false; +// crf.name = "Пользователь (ID)"; +// crf.db = "UID"; +// crf.isEditable = true; +// crf.style.width = 30; +// crf.isMust = true; +// crf.search.mode = CustomField.Search.SEARCH_MODES.INTEGER; +// crf.search.row = 1; +// dscr.addField(crf); +// +// +// +// +// crf = new CustomRelationField(MUser.class, "Пользователь (ID)"); +// crf.visible = true; +// crf.name = "Пользователь"; +// crf.db = "login"; +// crf.isEditable = true; +// crf.style.width = 100; +// crf.isMust = true; +// crf.search.mode = CustomField.Search.SEARCH_MODES.STRING; +// crf.search.row = 1; +// dscr.addField(crf); + + + + + + + field = new CustomField(); + field.visible = true; + field.name = "Язык"; + field.db = "language"; + field.isEditable = true; + field.style.width = 30; + field.isMust = true; + field.search.mode = CustomField.Search.SEARCH_MODES.STRING; + field.search.row = 1; + dscr.addField(field); + + + + + + + field = new CustomField(); + field.visible = true; + field.name = "Старое значение"; + field.db = "old_value"; + field.isEditable = true; + //field.style.width = 200; + field.isMust = true; + field.search.mode = CustomField.Search.SEARCH_MODES.STRING; + field.search.row = 1; + dscr.addField(field); + + + + field = new CustomField(); + field.visible = true; + field.name = "Новое Значение"; + field.db = "new_value"; + field.isEditable = true; + //sfield.style.width = 200; + field.isMust = true; + field.search.mode = CustomField.Search.SEARCH_MODES.STRING; + field.search.row = 1; + dscr.addField(field); + + + + + + DBListPanel panel = new DBListPanel(application, + MLog.class, + dscr, + Dimension.getFull(application), + setMode, + new Order(Order.LESS, MAbstractDataElement.F_CREATED, "Дата")); + return panel; + } + + + + + @Override + public DBSingle build(int ID){ + // TODO Auto-generated method stub + return null; + } +} + diff --git a/kz_cafe_admin/src/kz/cafe/admin/TabMessageCafe.java b/kz_cafe_admin/src/kz/cafe/admin/TabMessageCafe.java new file mode 100644 index 0000000..d8707a2 --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/TabMessageCafe.java @@ -0,0 +1,222 @@ +package kz.cafe.admin; + +import java.util.*; +import kz.cafe.admin.constants.AccessConstants.EditMode; +import kz.cafe.admin.hooks.*; +import kz.cafe.admin.panels.*; +import kz.cafe.admin.panels.model.*; +import kz.cafe.db.*; +import kz.cafe.db.model.*; +import com.vaadin.data.*; +import com.vaadin.ui.*; + +/** + * Main application class. + */ +public class TabMessageCafe extends AbstractTab{ + private static final long serialVersionUID = -7440565419856388384L; + + + + + public TabMessageCafe(AdminMain application, Set setMode){ + super(application, setMode); + } + + + + + @Override + public DBListPanel build(){ + CustomDescriptor dscr = new CustomDescriptor(); + + CustomField field = new CustomField(); + field.visible = true; + field.search.mode = CustomField.Search.SEARCH_MODES.INTEGER; + field.name = "ID"; + field.db = "ID"; + field.isEditable = false; + field.style.width = 50; + field.isSortable = true; + field.search.row = 0; + dscr.addField(field); + + + + + CustomFixedComboField ccf = new CustomFixedComboField(); + ccf.visible = true; + ccf.name = "Автор"; + ccf.db = "fromUID"; + ccf.isEditable = true; + ccf.style.width = 200; + ccf.isMust = true; + dscr.addField(ccf); + + + + ccf = new CustomFixedComboField(); + ccf.visible = true; + ccf.name = "Объект"; + ccf.db = "toCID"; + ccf.isEditable = true; + ccf.style.width = 200; + ccf.isMust = true; + dscr.addField(ccf); + + + + + field = new CustomField(); + field.visible = true; + field.name = "Отзыв"; + field.db = "text"; + field.isEditable = true; + field.style.width = 0; + field.style.height = 100; + field.isMust = false; + field.search.mode = CustomField.Search.SEARCH_MODES.LOCALIZED_STRING; + dscr.addField(field); + + + + + + + + + + + + CustomDateField dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "Создан"; + dateField.db = "created"; + dateField.isEditable = false; + dateField.style.width = 120; + dateField.isSortable = true; + dateField.search.mode = CustomField.Search.SEARCH_MODES.DATE_RANGE; + dateField.search.row = 1; + dscr.addField(dateField); + + + + + + dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "Обновлен"; + dateField.db = "updated"; + dateField.isEditable = false; + dateField.style.width = 120; + dateField.isSortable = true; + dateField.search.mode = CustomField.Search.SEARCH_MODES.DATE_RANGE; + dateField.search.row = 1; + dscr.addField(dateField); + + + + final CustomField fieldRead = new CustomField(); + fieldRead.visible = true; + fieldRead.name = "Прочитано"; + fieldRead.db = "read"; + fieldRead.isEditable = true; + fieldRead.style.width = 80; + fieldRead.isSortable = true; + fieldRead.search.mode = CustomField.Search.SEARCH_MODES.BOOLEAN_ONLY_TRUE; + fieldRead.search.row = 1; + dscr.addField(fieldRead); + + + Constraint constraint = new Constraint(); + + + if(application.isAdmin){ + } + else{ + constraint.criteria.add(new Constraint.Criterion(MUser.F_OWNER_ID, application.UID)); + } + + + + final DBListPanel panel = new DBListPanel(application, + MMessageCafe.class, + dscr, + Dimension.getFull(application), + setMode, + constraint, + new Order(Order.CREATER, + fieldRead.db, + fieldRead.name)); + //panel.addPanel(new ExtraPanelImageUploader(panel, fieldImage), false); + //panelCourse.addPanel(new ExtraPanelImageViewer(panelCourse, fieldImage, 50), true); + + + + panel.table.setCellStyleGenerator(new Table.CellStyleGenerator(){ + private static final long serialVersionUID = -6586615471330221828L; + + @Override + public String getStyle(Object itemId, Object propertyId){ + if(propertyId == null){ + // Styling for row + + + Item item = panel.table.getItem(itemId); + boolean isProcessed = (Boolean) item.getItemProperty(fieldRead.name).getValue(); + + if(isProcessed){ + } + else{ + return "highlight-stressed"; + } +// if(firstName.toLowerCase().startsWith("g")){ +// return "highlight-green"; +// } +// else if(firstName.contains("o")){ +// return "highlight-red"; +// } +// else{ +// return null; +// } + + + if(panel.setBlockedRecords.contains(itemId)){ + return "highlight-blocked"; + } + else{ + return null; + } + + } + else{ + // styling for column propertyId + return null; + } + } + }); + + + panel.hookDelete(new FeedbackHook()); + panel.hookAdd(new FeedbackHook()); + panel.hookEdit(new FeedbackHook()); + panel.hookUndelete(new FeedbackHook()); + + return panel; + } + + + + + + + + + + @Override + public DBSingle build(int ID){ + + return null; + } +} + diff --git a/kz_cafe_admin/src/kz/cafe/admin/TabMessageSystem.java b/kz_cafe_admin/src/kz/cafe/admin/TabMessageSystem.java new file mode 100644 index 0000000..2d0ed22 --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/TabMessageSystem.java @@ -0,0 +1,210 @@ +package kz.cafe.admin; + +import java.util.*; +import kz.cafe.admin.constants.AccessConstants.EditMode; +import kz.cafe.admin.hooks.*; +import kz.cafe.admin.panels.*; +import kz.cafe.admin.panels.model.*; +import kz.cafe.db.*; +import kz.cafe.db.model.*; +import com.vaadin.data.*; +import com.vaadin.ui.*; + +/** + * Main application class. + */ +public class TabMessageSystem extends AbstractTab{ + private static final long serialVersionUID = -7440565419856388384L; + + + + + public TabMessageSystem(AdminMain application, Set setMode){ + super(application, setMode); + } + + + + + @Override + public DBListPanel build(){ + CustomDescriptor dscr = new CustomDescriptor(); + + CustomField field = new CustomField(); + field.visible = true; + field.search.mode = CustomField.Search.SEARCH_MODES.INTEGER; + field.name = "ID"; + field.db = "ID"; + field.isEditable = false; + field.style.width = 50; + field.isSortable = true; + field.search.row = 0; + dscr.addField(field); + + + + + CustomFixedComboField ccf = new CustomFixedComboField(); + ccf.visible = true; + ccf.name = "Автор"; + ccf.db = "fromUID"; + ccf.isEditable = true; + ccf.style.width = 200; + ccf.isMust = true; + dscr.addField(ccf); + + + + field = new CustomField(); + field.visible = true; + field.name = "Отзыв"; + field.db = "text"; + field.isEditable = true; + field.style.width = 0; + field.style.height = 100; + field.isMust = false; + field.search.mode = CustomField.Search.SEARCH_MODES.LOCALIZED_STRING; + dscr.addField(field); + + + + + + + + + + + + CustomDateField dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "Создан"; + dateField.db = "created"; + dateField.isEditable = false; + dateField.style.width = 120; + dateField.isSortable = true; + dateField.search.mode = CustomField.Search.SEARCH_MODES.DATE_RANGE; + dateField.search.row = 1; + dscr.addField(dateField); + + + + + + dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "Обновлен"; + dateField.db = "updated"; + dateField.isEditable = false; + dateField.style.width = 120; + dateField.isSortable = true; + dateField.search.mode = CustomField.Search.SEARCH_MODES.DATE_RANGE; + dateField.search.row = 1; + dscr.addField(dateField); + + + + final CustomField fieldRead = new CustomField(); + fieldRead.visible = true; + fieldRead.name = "Прочитано"; + fieldRead.db = "read"; + fieldRead.isEditable = true; + fieldRead.style.width = 80; + fieldRead.isSortable = true; + fieldRead.search.mode = CustomField.Search.SEARCH_MODES.BOOLEAN_ONLY_TRUE; + fieldRead.search.row = 1; + dscr.addField(fieldRead); + + + Constraint constraint = new Constraint(); + + + if(application.isAdmin){ + } + else{ + constraint.criteria.add(new Constraint.Criterion(MUser.F_OWNER_ID, application.UID)); + } + + + + final DBListPanel panel = new DBListPanel(application, + MMessageSystem.class, + dscr, + Dimension.getFull(application), + setMode, + constraint, + new Order(Order.CREATER, + fieldRead.db, + fieldRead.name)); + //panel.addPanel(new ExtraPanelImageUploader(panel, fieldImage), false); + //panelCourse.addPanel(new ExtraPanelImageViewer(panelCourse, fieldImage, 50), true); + + + + panel.table.setCellStyleGenerator(new Table.CellStyleGenerator(){ + private static final long serialVersionUID = -6586615471330221828L; + + @Override + public String getStyle(Object itemId, Object propertyId){ + if(propertyId == null){ + // Styling for row + + + Item item = panel.table.getItem(itemId); + boolean isProcessed = (Boolean) item.getItemProperty(fieldRead.name).getValue(); + + if(isProcessed){ + } + else{ + return "highlight-stressed"; + } +// if(firstName.toLowerCase().startsWith("g")){ +// return "highlight-green"; +// } +// else if(firstName.contains("o")){ +// return "highlight-red"; +// } +// else{ +// return null; +// } + + + if(panel.setBlockedRecords.contains(itemId)){ + return "highlight-blocked"; + } + else{ + return null; + } + + } + else{ + // styling for column propertyId + return null; + } + } + }); + + + panel.hookDelete(new FeedbackHook()); + panel.hookAdd(new FeedbackHook()); + panel.hookEdit(new FeedbackHook()); + panel.hookUndelete(new FeedbackHook()); + + return panel; + } + + + + + + + + + + @Override + public DBSingle build(int ID){ + + return null; + } +} + diff --git a/kz_cafe_admin/src/kz/cafe/admin/TabNews.java b/kz_cafe_admin/src/kz/cafe/admin/TabNews.java new file mode 100644 index 0000000..0e5863a --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/TabNews.java @@ -0,0 +1,198 @@ +package kz.cafe.admin; + +import java.util.*; +import kz.cafe.admin.constants.AccessConstants.EditMode; +import kz.cafe.admin.panel_extensions.*; +import kz.cafe.admin.panels.*; +import kz.cafe.admin.panels.model.*; +import kz.cafe.db.*; +import kz.cafe.db.model.*; + +public class TabNews extends AbstractTab{ + private static final long serialVersionUID = -6879996703990744601L; + + + + + + + public TabNews(AdminMain application, Set setMode){ + super(application, setMode); + } + + + + + @Override + public DBListPanel build(){ + CustomDescriptor dscr = new CustomDescriptor(); + + CustomField field = new CustomField(); + field.visible = true; + field.search.mode = CustomField.Search.SEARCH_MODES.INTEGER; + field.name = "ID"; + field.db = "ID"; + field.isEditable = false; + field.style.width = 50; + field.isSortable = true; + field.search.row = 0; + dscr.addField(field); + + + + + field = new CustomField(); + field.visible = true; + field.name = "Название"; + field.db = "name"; + field.isEditable = true; + field.style.width = 200; + field.isMust = true; + field.search.mode = CustomField.Search.SEARCH_MODES.LOCALIZED_STRING; + dscr.addField(field); + + + + + field = new CustomField(); + field.visible = true; + field.name = "Описание"; + field.db = "description"; + field.isEditable = true; + field.style.width = 0; + field.search.mode = CustomField.Search.SEARCH_MODES.LOCALIZED_STRING; + field.search.row = 0; + dscr.addField(field); + + + + + CustomImageField fieldLogo = new CustomImageField(); + fieldLogo.visible = true; + fieldLogo.name = "Изображение"; + fieldLogo.db = "image"; + fieldLogo.isEditable = true; + fieldLogo.style.width = 40; + fieldLogo.style.height = 40; + fieldLogo.isImageInTable = true; + dscr.addField(fieldLogo); + + + + CustomFixedComboField ccf = new CustomFixedComboField(); + ccf.visible = true; + ccf.name = "Объект"; + ccf.db = "CID"; + ccf.isEditable = true; + ccf.style.width = 100; + ccf.isMust = true; + ccf.search.row = 1; + dscr.addField(ccf); + + + + field = new CustomField(); + field.visible = true; + field.name = "На главной"; + field.db = "showMainScreen"; + field.isEditable = true; + field.style.width = 100; + field.isSortable = true; + field.search.mode = CustomField.Search.SEARCH_MODES.BOOLEAN_ONLY_TRUE; + field.search.row = 3; + dscr.addField(field); + + field = new CustomField(); + field.visible = true; + field.name = "В новостях"; + field.db = "showNews"; + field.isEditable = true; + field.style.width = 100; + field.isSortable = true; + field.search.mode = CustomField.Search.SEARCH_MODES.BOOLEAN_ONLY_TRUE; + field.search.row = 3; + dscr.addField(field); + + + + + + + + if(application.isAdmin){ + ccf = new CustomFixedComboField(); + ccf.visible = true; + ccf.name = "Владелец"; + ccf.db = MAbstractDataElement.F_OWNER_ID; + ccf.isEditable = true; + ccf.style.width = 120; + ccf.isMust = true; + //ccf.search.mode = CustomField.Search.SEARCH_MODES.NONE; + ccf.search.row = 2; + dscr.addField(ccf); + } + + + + + + CustomDateField dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "Известить"; + dateField.db = "date_notification"; + dateField.isEditable = true; + dateField.style.width = 120; + dateField.isSortable = true; + dateField.search.mode = CustomField.Search.SEARCH_MODES.DATE_RANGE; + dateField.search.row = 1; + dscr.addField(dateField); + + + + + field = new CustomField(); + field.visible = true; + field.name = "Опубликовано"; + field.db = "published"; + field.isEditable = true; + field.style.width = 40; + field.isSortable = true; + field.search.mode = CustomField.Search.SEARCH_MODES.BOOLEAN_ONLY_TRUE; + field.search.row = 1; + dscr.addField(field); + + + Constraint constraint = new Constraint(); + + if(application.isAdmin){ + } + else{ + constraint.criteria.add(new Constraint.Criterion(MUser.F_OWNER_ID, application.UID)); + } + + + + DBListPanel panel = new DBListPanel(application, + MNews.class, + dscr, + Dimension.getFull(application), + setMode, + constraint); + panel.addPanel(new ExtraPanelImageUploader(panel, fieldLogo), false); + + + return panel; + } + + + + + + + @Override + public DBSingle build(int ID){ + // TODO Auto-generated method stub + return null; + } +} + diff --git a/kz_cafe_admin/src/kz/cafe/admin/TabOrderItems.java b/kz_cafe_admin/src/kz/cafe/admin/TabOrderItems.java new file mode 100644 index 0000000..d1b052a --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/TabOrderItems.java @@ -0,0 +1,302 @@ +package kz.cafe.admin; + +import java.util.*; +import com.vaadin.data.*; +import com.vaadin.ui.*; +import kz.cafe.admin.constants.AccessConstants.EditMode; +import kz.cafe.admin.panels.*; +import kz.cafe.admin.panels.model.*; +import kz.cafe.db.model.*; + + + +public class TabOrderItems extends AbstractTab{ + private static final long serialVersionUID = -8572183427270759965L; + + + + + public TabOrderItems(AdminMain application, Set setMode){ + super(application, setMode); + } + + + + + + + + @Override + public DBListPanel build(){ + CustomDescriptor dscr = new CustomDescriptor(); + + CustomField field = new CustomField(); + field.visible = true; + field.search.mode = CustomField.Search.SEARCH_MODES.INTEGER; + field.name = "ID"; + field.db = "ID"; + field.isEditable = false; + field.style.width = 50; + field.isSortable = true; + field.search.row = 0; + dscr.addField(field); + + + CustomFixedComboField ccf = new CustomFixedComboField(); + ccf.visible = true; + ccf.name = "Объект"; + ccf.db = "CID"; + ccf.isEditable = true; + ccf.style.width = 110; + ccf.isMust = true; + ccf.search.row = 1; + dscr.addField(ccf); + + + ccf = new CustomFixedComboField(); + ccf.visible = true; + ccf.name = "Клиент"; + ccf.db = "UID"; + ccf.isEditable = true; + ccf.style.width = 120; + ccf.isMust = true; + dscr.addField(ccf); + + + + ccf = new CustomFixedComboField(); + ccf.visible = true; + ccf.name = "Акция"; + ccf.db = "AID"; + ccf.isEditable = true; + ccf.style.width = 120; + ccf.isMust = false; + dscr.addField(ccf); + + + + + field = new CustomField(); + field.visible = true; + field.name = "Комментарий"; + field.db = "comment"; + field.isEditable = true; + field.style.width = 0; + field.isMust = false; + field.search.mode = CustomField.Search.SEARCH_MODES.LOCALIZED_STRING; + dscr.addField(field); + + + + + + + + CustomDateField dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "Создан"; + dateField.db = "created"; + dateField.isEditable = false; + dateField.style.width = 120; + dateField.isSortable = true; + dateField.search.mode = CustomField.Search.SEARCH_MODES.DATE_RANGE; + dateField.search.row = 1; + dscr.addField(dateField); + + + + + + dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "Обновлен"; + dateField.db = "updated"; + dateField.isEditable = false; + dateField.style.width = 120; + dateField.isSortable = true; + dateField.search.mode = CustomField.Search.SEARCH_MODES.DATE_RANGE; + dateField.search.row = 1; + dscr.addField(dateField); + + + + + final CustomField fieldConfirmed = new CustomField(); + fieldConfirmed.visible = true; + fieldConfirmed.name = "Обработан"; + fieldConfirmed.db = "confirmed"; + fieldConfirmed.isEditable = true; + fieldConfirmed.style.width = 80; + fieldConfirmed.isSortable = true; + fieldConfirmed.search.mode = CustomField.Search.SEARCH_MODES.BOOLEAN_ONLY_TRUE; + fieldConfirmed.search.row = 1; + dscr.addField(fieldConfirmed); + + + + + + final CustomField fieldClosed = new CustomField(); + fieldClosed.visible = true; + fieldClosed.name = "Закрыт"; + fieldClosed.db = "closed"; + fieldClosed.isEditable = true; + fieldClosed.style.width = 80; + fieldClosed.isSortable = true; + fieldClosed.search.mode = CustomField.Search.SEARCH_MODES.BOOLEAN_ONLY_TRUE; + fieldClosed.search.row = 1; + dscr.addField(fieldClosed); + + + + final DBListPanel panel = new DBListPanel(application, + MOrderItem.class, + dscr, + Dimension.getFull(application), + setMode, + new Order(Order.CREATER, + fieldConfirmed.db, + fieldConfirmed.name)); + + + + panel.table.setCellStyleGenerator(new Table.CellStyleGenerator(){ + private static final long serialVersionUID = -3776734826403357164L; + + @Override + public String getStyle(Object itemId, Object propertyId){ + if(propertyId == null){ + // Styling for row + + + Item item = panel.table.getItem(itemId); + + boolean isClosed = (Boolean) item.getItemProperty(fieldClosed.name).getValue(); + if(isClosed){ + return "highlight-gray"; + } + + + boolean isProcessed = (Boolean) item.getItemProperty(fieldConfirmed.name).getValue(); + if(isProcessed){ + } + else{ + return "highlight-stressed"; + } +// if(firstName.toLowerCase().startsWith("g")){ +// return "highlight-green"; +// } +// else if(firstName.contains("o")){ +// return "highlight-red"; +// } +// else{ +// return null; +// } + + + if(panel.setBlockedRecords.contains(itemId)){ + return "highlight-blocked"; + } + else{ + return null; + } + + } + else{ + // styling for column propertyId + return null; + } + } + }); + + + return panel; + } + + + + + @Override + public DBSingle build(int ID){ + // TODO Auto-generated method stub + return null; + } + + + + + + + + + public static CustomDescriptor buildSelector(){ + CustomDescriptor dscr = new CustomDescriptor(); + + CustomField field = new CustomField(); + field.visible = true; + field.search.mode = CustomField.Search.SEARCH_MODES.INTEGER; + field.name = "ID"; + field.db = "ID"; + field.isEditable = false; + field.style.width = 50; + field.isSortable = true; + field.search.row = 0; + dscr.addField(field); + + + CustomFixedComboField ccf = new CustomFixedComboField(); + ccf.visible = true; + field.search.mode = CustomField.Search.SEARCH_MODES.NONE; + ccf.name = "Ордер"; + ccf.db = "OID"; + ccf.isEditable = false; + ccf.style.width = 300; + ccf.isMust = true; + ccf.search.row = 0; + dscr.addField(ccf); + + + ccf = new CustomFixedComboField(); + ccf.visible = true; + ccf.name = "Блюдо"; + ccf.db = "MID"; + ccf.isEditable = true; + ccf.style.width = 400; + ccf.style.alignment = CustomField.Alignment.LEFT; + ccf.isMust = true; + dscr.addField(ccf); + + + + field = new CustomField(); + field.visible = true; + field.search.mode = CustomField.Search.SEARCH_MODES.INTEGER; + field.name = "Кол-во"; + field.db = "quantity"; + field.isEditable = true; + field.style.width = 60; + field.style.expandable = false; + field.isSortable = true; + field.search.row = 0; + field.style.alignment = CustomField.Alignment.LEFT; + dscr.addField(field); + + + + field = new CustomField(); + field.visible = true; + field.search.mode = CustomField.Search.SEARCH_MODES.INTEGER_RANGE; + field.name = "Цена"; + field.db = "price"; + field.isEditable = false; + field.style.width = 100; + field.isSortable = true; + field.search.row = 0; + field.style.alignment = CustomField.Alignment.LEFT; + dscr.addField(field); + + + return dscr; + } +} + diff --git a/kz_cafe_admin/src/kz/cafe/admin/TabOrders.java b/kz_cafe_admin/src/kz/cafe/admin/TabOrders.java new file mode 100644 index 0000000..98cce28 --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/TabOrders.java @@ -0,0 +1,377 @@ +package kz.cafe.admin; + +import java.util.*; +import kz.cafe.admin.constants.AccessConstants.EditMode; +import kz.cafe.admin.hooks.*; +import kz.cafe.admin.panel_extensions.*; +import kz.cafe.admin.panels.*; +import kz.cafe.admin.panels.model.*; +import kz.cafe.constants.*; +import kz.cafe.db.*; +import kz.cafe.db.model.*; +import com.vaadin.data.*; +import com.vaadin.ui.*; + + + +public class TabOrders extends AbstractTab{ + private static final long serialVersionUID = -8572183427270759965L; + + + + + public TabOrders(AdminMain application, Set setMode){ + super(application, setMode); + } + + + + + + + @Override + public DBListPanel build(){ + CustomDescriptor dscr = new CustomDescriptor(); + + CustomField field = new CustomField(); + field.visible = true; + field.search.mode = CustomField.Search.SEARCH_MODES.INTEGER; + field.name = "ID"; + field.db = "ID"; + field.isEditable = false; + field.style.width = 50; + field.isSortable = true; + field.search.row = 0; + dscr.addField(field); + + + CustomFixedComboField ccf = new CustomFixedComboField(); + ccf.visible = true; + ccf.name = "Объект"; + ccf.db = "CID"; + ccf.isEditable = true; + ccf.style.width = 110; + ccf.isMust = true; + ccf.search.row = 1; + dscr.addField(ccf); + + + ccf = new CustomFixedComboField(); + ccf.visible = true; + ccf.name = "Клиент"; + ccf.db = "UID"; + ccf.isEditable = true; + ccf.style.width = 120; + ccf.isMust = true; + dscr.addField(ccf); + + + + ccf = new CustomFixedComboField(); + ccf.visible = true; + ccf.name = "Акция"; + ccf.db = "AID"; + ccf.isEditable = true; + ccf.style.width = 150; + ccf.isMust = false; + dscr.addField(ccf); + + + + + field = new CustomField(); + field.visible = true; + field.name = "Доп. инфо"; + field.db = "comment"; + field.isEditable = true; + field.style.width = 0; + field.isMust = false; + field.search.mode = CustomField.Search.SEARCH_MODES.LOCALIZED_STRING; + dscr.addField(field); + + + + field = new CustomField(); + field.visible = true; + field.name = "Цена"; + field.db = "price"; + field.isEditable = true; + field.style.width = 80; + field.isMust = false; + field.search.mode = CustomField.Search.SEARCH_MODES.INTEGER; + dscr.addField(field); + + + + + + ccf = new CustomFixedComboField(); + ccf.visible = true; + ccf.name = "Город"; + ccf.db = "deliveryCity"; + ccf.isEditable = true; + ccf.style.width = 100; + ccf.isMust = true; + ccf.search.row = 0; + dscr.addField(ccf); + + + + field = new CustomField(); + field.visible = true; + field.name = "Улица"; + field.db = "deliveryStreet"; + field.isEditable = true; + field.style.width = 200; + field.isMust = false; + field.search.mode = CustomField.Search.SEARCH_MODES.LOCALIZED_STRING; + field.style.alignment = CustomField.Alignment.LEFT; + dscr.addField(field); + + + + + field = new CustomField(); + field.visible = true; + field.name = "Дом"; + field.db = "deliveryBuilding"; + field.isEditable = true; + field.style.width = 50; + field.isMust = false; + field.search.mode = CustomField.Search.SEARCH_MODES.LOCALIZED_STRING; + dscr.addField(field); + + + + + field = new CustomField(); + field.visible = true; + field.name = "Кв."; + field.db = "deliveryApartment"; + field.isEditable = true; + field.style.width = 50; + field.isMust = false; + field.search.mode = CustomField.Search.SEARCH_MODES.LOCALIZED_STRING; + dscr.addField(field); + + + + + field = new CustomField(); + field.visible = true; + field.name = "Тел."; + field.db = "deliveryPhone"; + field.isEditable = true; + field.style.width = 150; + field.isMust = false; + field.search.mode = CustomField.Search.SEARCH_MODES.LOCALIZED_STRING; + dscr.addField(field); + + + + + + CustomDateField dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "Создан"; + dateField.db = "created"; + dateField.isEditable = false; + dateField.style.width = 120; + dateField.isSortable = true; + dateField.search.mode = CustomField.Search.SEARCH_MODES.DATE_RANGE; + dateField.search.row = 1; + dscr.addField(dateField); + + + + + + dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "Обновлен"; + dateField.db = "updated"; + dateField.isEditable = false; + dateField.style.width = 120; + dateField.isSortable = true; + dateField.search.mode = CustomField.Search.SEARCH_MODES.DATE_RANGE; + dateField.search.row = 1; + dscr.addField(dateField); + + + + + + + + + + final CustomFixedComboField ccfStatus = new CustomFixedComboField(); + ccfStatus.type = CustomFixedComboField.TYPE.TEXT; + ccfStatus.visible = true; + ccfStatus.name = "Статус"; + ccfStatus.db = "status"; + ccfStatus.isEditable = true; + ccfStatus.style.width = 100; + ccfStatus.add(new CustomFixedComboField.Element(OrderConstants.STATUS.NEW.ordinal(), "Новый")); + ccfStatus.add(new CustomFixedComboField.Element(OrderConstants.STATUS.IN_PROGRESS.ordinal(), "В работе")); + ccfStatus.add(new CustomFixedComboField.Element(OrderConstants.STATUS.PAID.ordinal(), "Оплачен")); + ccfStatus.add(new CustomFixedComboField.Element(OrderConstants.STATUS.CANCELLED.ordinal(), "Отменен")); + ccfStatus.isMust = true; + ccfStatus.search.row = 1; + dscr.addField(ccfStatus); + + + + + + + + +// final CustomField fieldConfirmed = new CustomField(); +// fieldConfirmed.visible = true; +// fieldConfirmed.name = "Обработан"; +// fieldConfirmed.db = "confirmed"; +// fieldConfirmed.isEditable = true; +// fieldConfirmed.style.width = 80; +// fieldConfirmed.isSortable = true; +// fieldConfirmed.search.mode = CustomField.Search.SEARCH_MODES.BOOLEAN_ONLY_TRUE; +// fieldConfirmed.search.row = 1; +// dscr.addField(fieldConfirmed); +// +// +// +// +// +// final CustomField fieldClosed = new CustomField(); +// fieldClosed.visible = true; +// fieldClosed.name = "Закрыт"; +// fieldClosed.db = "closed"; +// fieldClosed.isEditable = true; +// fieldClosed.style.width = 80; +// fieldClosed.isSortable = true; +// fieldClosed.search.mode = CustomField.Search.SEARCH_MODES.BOOLEAN_ONLY_TRUE; +// fieldClosed.search.row = 1; +// dscr.addField(fieldClosed); + + + Constraint constraint = new Constraint(); + + if(application.isAdmin){ + } + else{ + constraint.criteria.add(new Constraint.Criterion(MUser.F_OWNER_ID, application.UID)); + } + + + final DBListPanel panel = new DBListPanel(application, + MOrder.class, + dscr, + Dimension.getFull(application), + setMode, + constraint, + new Order(Order.CREATER, + ccfStatus.db, + ccfStatus.name)); + + + panel.addPanel(new ExtraPanelOrderItems(application, panel), false); + + + + + panel.table.setCellStyleGenerator(new Table.CellStyleGenerator(){ + private static final long serialVersionUID = -3776734826403357164L; + + @Override + public String getStyle(Object itemId, Object propertyId){ + if(propertyId == null){ + // Styling for row + + + Item item = panel.table.getItem(itemId); + + int iStatus; + try{ + String sStatus = "" + item.getItemProperty(ccfStatus.name).getValue(); + iStatus = ccfStatus.get(sStatus).id; + } + catch (Throwable e){ + iStatus = 0; + } + + OrderConstants.STATUS status = OrderConstants.STATUS.values()[iStatus]; + + switch (status) { + case NEW:{ + return "highlight-stressed"; + } + case PAID:{ + return "highlight-gray"; + } + case CANCELLED:{ + return "highlight-gray"; + } + } + + + +// boolean isClosed = (Boolean) item.getItemProperty(ccfStatus.name).getValue(); +// if(isClosed){ +// return "highlight-gray"; +// } +// +// +// boolean isProcessed = (Boolean) item.getItemProperty(fieldConfirmed.name).getValue(); +// if(isProcessed){ +// } +// else{ +// return "highlight-stressed"; +// } +// if(firstName.toLowerCase().startsWith("g")){ +// return "highlight-green"; +// } +// else if(firstName.contains("o")){ +// return "highlight-red"; +// } +// else{ +// return null; +// } + + + if(panel.setBlockedRecords.contains(itemId)){ + return "highlight-blocked"; + } + else{ + return null; + } + + } + else{ + // styling for column propertyId + return null; + } + } + }); + + + + panel.hookDelete(new OrderHook()); + panel.hookAdd(new OrderHook()); + panel.hookEdit(new OrderHook()); + panel.hookUndelete(new OrderHook()); + + + + return panel; + } + + + + + @Override + public DBSingle build(int ID){ + // TODO Auto-generated method stub + return null; + } +} + diff --git a/kz_cafe_admin/src/kz/cafe/admin/TabPhones.java b/kz_cafe_admin/src/kz/cafe/admin/TabPhones.java new file mode 100644 index 0000000..ffbca33 --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/TabPhones.java @@ -0,0 +1,209 @@ +package kz.cafe.admin; + +import java.util.*; +import kz.cafe.admin.constants.AccessConstants.EditMode; +import kz.cafe.admin.panel_extensions.*; +import kz.cafe.admin.panels.*; +import kz.cafe.admin.panels.model.*; +import kz.cafe.db.*; +import kz.cafe.db.model.*; + +public class TabPhones extends AbstractTab{ + private static final long serialVersionUID = 6724021400906062671L; + + + + + + + + public TabPhones(AdminMain application, Set setMode){ + super(application, setMode); + } + + + + + @Override + public DBListPanel build(){ + CustomDescriptor dscr = new CustomDescriptor(); + + CustomField field = new CustomField(); + field.visible = false; + field.search.mode = CustomField.Search.SEARCH_MODES.NONE; + field.name = "ID"; + field.db = "ID"; + field.isEditable = false; + field.style.width = 50; + field.isSortable = true; + field.search.row = 0; + dscr.addField(field); + + + + CustomFixedComboField ccf = new CustomFixedComboField(); + ccf.visible = true; + ccf.name = "Город"; + ccf.db = "city"; + ccf.isEditable = true; + ccf.style.width = 150; + ccf.isMust = true; + ccf.search.row = 0; + dscr.addField(ccf); + + + + + + + field = new CustomField(); + field.visible = true; + field.name = "Название"; + field.db = "name"; + field.isEditable = true; + field.style.width = 200; + field.isMust = true; + field.search.mode = CustomField.Search.SEARCH_MODES.LOCALIZED_STRING; + dscr.addField(field); + + + + + + field = new CustomField(); + field.visible = true; + field.name = "Телефон"; + field.db = "phone"; + field.isEditable = true; + field.style.width = 200; + field.isMust = true; + field.search.mode = CustomField.Search.SEARCH_MODES.STRING; + dscr.addField(field); + + + + + + field = new CustomField(); + field.visible = true; + field.name = "Описание"; + field.db = "description"; + field.isEditable = true; + field.style.width = 0; + field.search.mode = CustomField.Search.SEARCH_MODES.LOCALIZED_STRING; + field.search.row = 0; + dscr.addField(field); + + + + + CustomImageField fieldLogo = new CustomImageField(); + fieldLogo.visible = false; + fieldLogo.name = "Изображение"; + fieldLogo.db = "image"; + fieldLogo.isEditable = true; + fieldLogo.style.width = 25; + fieldLogo.style.height = 25; + fieldLogo.isImageInTable = false; + dscr.addField(fieldLogo); + + + + + + + CustomDateField dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "Создан"; + dateField.db = "created"; + dateField.isEditable = false; + dateField.style.width = 120; + dateField.isSortable = true; + dateField.search.mode = CustomField.Search.SEARCH_MODES.DATE_RANGE; + dateField.search.row = 2; + dscr.addField(dateField); + + + + + + dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "Обновлен"; + dateField.db = "updated"; + dateField.isEditable = false; + dateField.style.width = 120; + dateField.isSortable = true; + dateField.search.mode = CustomField.Search.SEARCH_MODES.DATE_RANGE; + dateField.search.row = 2; + dscr.addField(dateField); + + + + + + + + field = new CustomField(); + field.visible = true; + field.name = "Опубликовано"; + field.db = "published"; + field.isEditable = true; + field.style.width = 40; + field.isSortable = true; + field.search.mode = CustomField.Search.SEARCH_MODES.BOOLEAN_ONLY_TRUE; + field.search.row = 0; + dscr.addField(field); + + + + field = new CustomField(); + field.visible = true; + field.search.mode = CustomField.Search.SEARCH_MODES.INTEGER; + field.name = "Порядок"; + field.db = "order"; + field.isEditable = true; + field.style.width = 50; + field.isSortable = true; + field.style.expandable = false; + field.search.row = 0; + dscr.addField(field); + + + + Constraint constraint = new Constraint(); + +// if(application.isAdmin){ +// } +// else{ +// constraint.criteria.add(new Constraint.Criterion(true, MUser.F_OWNER_ID, application.UID)); +// } + + + + DBListPanel panel = new DBListPanel(application, + MPhone.class, + dscr, + Dimension.getFull(application), + setMode, + constraint); + panel.addPanel(new ExtraPanelImageUploader(panel, fieldLogo), false); + panel.addPanel(new ExtraPanelImageViewer(panel, fieldLogo), true); + + + return panel; + } + + + + + + + + @Override + public DBSingle build(int ID){ + // TODO Auto-generated method stub + return null; + } +} + diff --git a/kz_cafe_admin/src/kz/cafe/admin/TabReservation.java b/kz_cafe_admin/src/kz/cafe/admin/TabReservation.java new file mode 100644 index 0000000..f7b0f4e --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/TabReservation.java @@ -0,0 +1,271 @@ +package kz.cafe.admin; + +import java.util.*; +import kz.cafe.admin.constants.AccessConstants.EditMode; +import kz.cafe.admin.panels.*; +import kz.cafe.admin.panels.model.*; +import kz.cafe.db.*; +import kz.cafe.db.model.*; +import com.vaadin.data.*; +import com.vaadin.ui.*; + +/** + * Main application class. + */ +public class TabReservation extends AbstractTab{ + private static final long serialVersionUID = -3210275047163076036L; + + + + + + public TabReservation(AdminMain application, Set setMode){ + super(application, setMode); + } + + + + + @Override + public DBListPanel build(){ + CustomDescriptor dscr = new CustomDescriptor(); + + CustomField field = new CustomField(); + field.visible = true; + field.search.mode = CustomField.Search.SEARCH_MODES.INTEGER; + field.name = "ID"; + field.db = "ID"; + field.isEditable = false; + field.style.width = 30; + field.isSortable = true; + field.search.row = 0; + dscr.addField(field); + + + + + CustomDateField dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "Время"; + dateField.db = "date"; + dateField.isEditable = true; + dateField.style.width = 120; + dateField.isSortable = true; + dateField.search.mode = CustomField.Search.SEARCH_MODES.DATE_RANGE; + dateField.search.row = 1; + dscr.addField(dateField); + + + + + CustomFixedComboField crf = new CustomFixedComboField(); + crf.visible = true; + crf.name = "Объект"; + crf.db = "CID"; + crf.isEditable = true; + crf.style.width = 110; + crf.isMust = true; + crf.search.row = 1; + dscr.addField(crf); + + + + + CustomFixedComboField ccf = new CustomFixedComboField(); + ccf.visible = true; + ccf.name = "Клиент"; + ccf.db = "UID"; + ccf.isEditable = true; + ccf.style.width = 120; + ccf.isMust = true; + dscr.addField(ccf); + + + + + field = new CustomField(); + field.visible = true; + field.search.mode = CustomField.Search.SEARCH_MODES.INTEGER; + field.name = "Мест"; + field.db = "sits"; + field.isEditable = true; + field.style.width = 50; + field.isSortable = true; + field.search.row = 0; + field.style.expandable = false; + dscr.addField(field); + + + + + + field = new CustomField(); + field.visible = true; + field.name = "Комментарий"; + field.db = "comment"; + field.isEditable = true; + field.style.width = 0; + field.isMust = false; + field.search.mode = CustomField.Search.SEARCH_MODES.LOCALIZED_STRING; + dscr.addField(field); + + + + + if(application.isAdmin){ + ccf = new CustomFixedComboField(); + ccf.visible = true; + ccf.name = "Владелец"; + ccf.db = MAbstractDataElement.F_OWNER_ID; + ccf.isEditable = true; + ccf.style.width = 120; + ccf.isMust = true; + //ccf.search.mode = CustomField.Search.SEARCH_MODES.NONE; + ccf.search.row = 2; + dscr.addField(ccf); + } + + + + + + dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "Создан"; + dateField.db = "created"; + dateField.isEditable = false; + dateField.style.width = 120; + dateField.isSortable = true; + dateField.search.mode = CustomField.Search.SEARCH_MODES.DATE_RANGE; + dateField.search.row = 1; + dscr.addField(dateField); + + + + + + + dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "Обновлен"; + dateField.db = "updated"; + dateField.isEditable = false; + dateField.style.width = 120; + dateField.isSortable = true; + dateField.search.mode = CustomField.Search.SEARCH_MODES.DATE_RANGE; + dateField.search.row = 1; + dscr.addField(dateField); + + + + + final CustomField fieldConfirmed = new CustomField(); + fieldConfirmed.visible = true; + fieldConfirmed.name = "Обработан"; + fieldConfirmed.db = "confirmed"; + fieldConfirmed.isEditable = true; + fieldConfirmed.style.width = 80; + fieldConfirmed.isSortable = true; + fieldConfirmed.search.mode = CustomField.Search.SEARCH_MODES.BOOLEAN_ONLY_TRUE; + fieldConfirmed.search.row = 2; + dscr.addField(fieldConfirmed); + + + + +// field = new CustomField(); +// field.visible = true; +// field.name = "Опубликован"; +// field.db = "published"; +// field.isEditable = true; +// field.style.width = 80; +// field.isSortable = true; +// field.search.mode = CustomField.Search.SEARCH_MODES.BOOLEAN_ONLY_TRUE; +// field.search.row = 2; +// dscr.addField(field); + + + Constraint constraint = new Constraint(); + + + if(application.isAdmin){ + } + else{ + constraint.criteria.add(new Constraint.Criterion(MUser.F_OWNER_ID, application.UID)); + } + + + + final DBListPanel panel = new DBListPanel(application, + MReservation.class, + dscr, + Dimension.getFull(application), + setMode, + constraint, + new Order(Order.CREATER, + fieldConfirmed.db, + fieldConfirmed.name)); + //panel.addPanel(new ExtraPanelImageUploader(panel, fieldImage), false); + //panelCourse.addPanel(new ExtraPanelImageViewer(panelCourse, fieldImage, 50), true); + + + + + panel.table.setCellStyleGenerator(new Table.CellStyleGenerator(){ + private static final long serialVersionUID = -3776734826403357164L; + + @Override + public String getStyle(Object itemId, Object propertyId){ + if(propertyId == null){ + // Styling for row + + + Item item = panel.table.getItem(itemId); + boolean isProcessed = (Boolean) item.getItemProperty(fieldConfirmed.name).getValue(); + + if(isProcessed){ + } + else{ + return "highlight-stressed"; + } +// if(firstName.toLowerCase().startsWith("g")){ +// return "highlight-green"; +// } +// else if(firstName.contains("o")){ +// return "highlight-red"; +// } +// else{ +// return null; +// } + + + if(panel.setBlockedRecords.contains(itemId)){ + return "highlight-blocked"; + } + else{ + return null; + } + + } + else{ + // styling for column propertyId + return null; + } + } + }); + + + return panel; + } + + + + + + @Override + public DBSingle build(int ID){ + // TODO Auto-generated method stub + return null; + } +} + diff --git a/kz_cafe_admin/src/kz/cafe/admin/TabRoleAdd.java b/kz_cafe_admin/src/kz/cafe/admin/TabRoleAdd.java new file mode 100644 index 0000000..8f94fc1 --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/TabRoleAdd.java @@ -0,0 +1,158 @@ +package kz.cafe.admin; + +import java.util.*; +import kz.cafe.admin.AdminMain.MenuElement; +import kz.cafe.admin.constants.AccessConstants.EditMode; +import kz.cafe.admin.panels.*; +import kz.cafe.admin.panels.model.*; +import kz.cafe.db.*; +import kz.cafe.db.model.*; + + +public class TabRoleAdd extends AbstractTab{ + private static final long serialVersionUID = 6848484607125250160L; + + + + + + public TabRoleAdd(AdminMain application, Set setMode){ + super(application, setMode); + } + + + + + @Override + public DBListPanel build(){ + CustomDescriptor dscr = new CustomDescriptor(); + + CustomField field = new CustomField(); + field.visible = true; + field.search.mode = CustomField.Search.SEARCH_MODES.INTEGER; + field.name = "ID"; + field.db = "ID"; + field.isEditable = false; + field.style.width = 50; + field.isSortable = true; + field.search.row = 0; + dscr.addField(field); + + + + field = new CustomField(); + field.visible = true; + field.name = "Название"; + field.db = "name"; + field.isEditable = true; + field.style.width = 150; + field.isMust = true; + field.search.mode = CustomField.Search.SEARCH_MODES.LOCALIZED_STRING; + dscr.addField(field); + + + + CustomFixedComboField ccf = new CustomFixedComboField(); + ccf.visible = true; + ccf.name = "Экраны"; + ccf.db = "screenAdd"; + ccf.isEditable = true; + ccf.search.mode = CustomField.Search.SEARCH_MODES.NONE; + + for(int ID : application.mapMenuID.keySet()){ + MenuElement menuElement = application.mapMenuID.get(ID); + ccf.add(new CustomFixedComboField.Element(menuElement.ID, menuElement.name, null)); + } + ccf.isMust = true; + dscr.addField(ccf); + + + Set setBlockedRecords = Collections.singleton(0); + + + DBListPanel panel = new DBListPanel(application, + MRole.class, + dscr, + Dimension.getFull(application), + setMode, + new Constraint(), + setBlockedRecords); + return panel; + } + + + + + + @Override + public DBSingle build(int ID){ + // TODO Auto-generated method stub + return null; + } + + + + + + + + + + +// public static DBListPanel buildWrite(AdminMain application, ViewConstants.EditMode editMode){ +// CustomDescriptor dscr = new CustomDescriptor(); +// +// CustomField field = new CustomField(); +// field.visible = true; +// field.search.mode = CustomField.Search.SEARCH_MODES.INTEGER; +// field.name = "ID"; +// field.db = "ID"; +// field.isEditable = false; +// field.style.width = 50; +// field.isSortable = true; +// field.search.row = 0; +// dscr.addField(field); +// +// +// +// field = new CustomField(); +// field.visible = true; +// field.name = "Название"; +// field.db = "name"; +// field.isEditable = true; +// field.style.width = 150; +// field.isMust = true; +// field.search.mode = CustomField.Search.SEARCH_MODES.LOCALIZED_STRING; +// dscr.addField(field); +// +// +// +// CustomComboField ccf = new CustomComboField(); +// ccf.visible = true; +// ccf.name = "Экраны"; +// ccf.db = "screenWrite"; +// ccf.isEditable = true; +// ccf.search.mode = CustomField.Search.SEARCH_MODES.NONE; +// +// for(int ID : application.mapMenuID.keySet()){ +// MenuElement menuElement = application.mapMenuID.get(ID); +// ccf.add(new CustomComboField.Element(menuElement.ID, menuElement.name, null)); +// } +// ccf.isMust = true; +// dscr.addField(ccf); +// +// +// Set setBlockedRecords = Collections.singleton(0); +// +// +// DBListPanel panel = new DBListPanel(application, +// MRole.class, +// dscr, +// Dimension.getFull(application), +// setMode, +// new Constraint(), +// setBlockedRecords); +// return panel; +// } +} + diff --git a/kz_cafe_admin/src/kz/cafe/admin/TabRoleDelete.java b/kz_cafe_admin/src/kz/cafe/admin/TabRoleDelete.java new file mode 100644 index 0000000..1270312 --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/TabRoleDelete.java @@ -0,0 +1,158 @@ +package kz.cafe.admin; + +import java.util.*; +import kz.cafe.admin.AdminMain.MenuElement; +import kz.cafe.admin.constants.AccessConstants.EditMode; +import kz.cafe.admin.panels.*; +import kz.cafe.admin.panels.model.*; +import kz.cafe.db.*; +import kz.cafe.db.model.*; + + +public class TabRoleDelete extends AbstractTab{ + private static final long serialVersionUID = 6848484607125250160L; + + + + + + public TabRoleDelete(AdminMain application, Set setMode){ + super(application, setMode); + } + + + + + @Override + public DBListPanel build(){ + CustomDescriptor dscr = new CustomDescriptor(); + + CustomField field = new CustomField(); + field.visible = true; + field.search.mode = CustomField.Search.SEARCH_MODES.INTEGER; + field.name = "ID"; + field.db = "ID"; + field.isEditable = false; + field.style.width = 50; + field.isSortable = true; + field.search.row = 0; + dscr.addField(field); + + + + field = new CustomField(); + field.visible = true; + field.name = "Название"; + field.db = "name"; + field.isEditable = true; + field.style.width = 150; + field.isMust = true; + field.search.mode = CustomField.Search.SEARCH_MODES.LOCALIZED_STRING; + dscr.addField(field); + + + + CustomFixedComboField ccf = new CustomFixedComboField(); + ccf.visible = true; + ccf.name = "Экраны"; + ccf.db = "screenDelete"; + ccf.isEditable = true; + ccf.search.mode = CustomField.Search.SEARCH_MODES.NONE; + + for(int ID : application.mapMenuID.keySet()){ + MenuElement menuElement = application.mapMenuID.get(ID); + ccf.add(new CustomFixedComboField.Element(menuElement.ID, menuElement.name, null)); + } + ccf.isMust = true; + dscr.addField(ccf); + + + Set setBlockedRecords = Collections.singleton(0); + + + DBListPanel panel = new DBListPanel(application, + MRole.class, + dscr, + Dimension.getFull(application), + setMode, + new Constraint(), + setBlockedRecords); + return panel; + } + + + + + + @Override + public DBSingle build(int ID){ + // TODO Auto-generated method stub + return null; + } + + + + + + + + + + +// public static DBListPanel buildWrite(AdminMain application, ViewConstants.EditMode editMode){ +// CustomDescriptor dscr = new CustomDescriptor(); +// +// CustomField field = new CustomField(); +// field.visible = true; +// field.search.mode = CustomField.Search.SEARCH_MODES.INTEGER; +// field.name = "ID"; +// field.db = "ID"; +// field.isEditable = false; +// field.style.width = 50; +// field.isSortable = true; +// field.search.row = 0; +// dscr.addField(field); +// +// +// +// field = new CustomField(); +// field.visible = true; +// field.name = "Название"; +// field.db = "name"; +// field.isEditable = true; +// field.style.width = 150; +// field.isMust = true; +// field.search.mode = CustomField.Search.SEARCH_MODES.LOCALIZED_STRING; +// dscr.addField(field); +// +// +// +// CustomComboField ccf = new CustomComboField(); +// ccf.visible = true; +// ccf.name = "Экраны"; +// ccf.db = "screenWrite"; +// ccf.isEditable = true; +// ccf.search.mode = CustomField.Search.SEARCH_MODES.NONE; +// +// for(int ID : application.mapMenuID.keySet()){ +// MenuElement menuElement = application.mapMenuID.get(ID); +// ccf.add(new CustomComboField.Element(menuElement.ID, menuElement.name, null)); +// } +// ccf.isMust = true; +// dscr.addField(ccf); +// +// +// Set setBlockedRecords = Collections.singleton(0); +// +// +// DBListPanel panel = new DBListPanel(application, +// MRole.class, +// dscr, +// Dimension.getFull(application), +// setMode, +// new Constraint(), +// setBlockedRecords); +// return panel; +// } +} + diff --git a/kz_cafe_admin/src/kz/cafe/admin/TabRoleEdit.java b/kz_cafe_admin/src/kz/cafe/admin/TabRoleEdit.java new file mode 100644 index 0000000..9828e5d --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/TabRoleEdit.java @@ -0,0 +1,158 @@ +package kz.cafe.admin; + +import java.util.*; +import kz.cafe.admin.AdminMain.MenuElement; +import kz.cafe.admin.constants.AccessConstants.EditMode; +import kz.cafe.admin.panels.*; +import kz.cafe.admin.panels.model.*; +import kz.cafe.db.*; +import kz.cafe.db.model.*; + + +public class TabRoleEdit extends AbstractTab{ + private static final long serialVersionUID = 6848484607125250160L; + + + + + + public TabRoleEdit(AdminMain application, Set setMode){ + super(application, setMode); + } + + + + + @Override + public DBListPanel build(){ + CustomDescriptor dscr = new CustomDescriptor(); + + CustomField field = new CustomField(); + field.visible = true; + field.search.mode = CustomField.Search.SEARCH_MODES.INTEGER; + field.name = "ID"; + field.db = "ID"; + field.isEditable = false; + field.style.width = 50; + field.isSortable = true; + field.search.row = 0; + dscr.addField(field); + + + + field = new CustomField(); + field.visible = true; + field.name = "Название"; + field.db = "name"; + field.isEditable = true; + field.style.width = 150; + field.isMust = true; + field.search.mode = CustomField.Search.SEARCH_MODES.LOCALIZED_STRING; + dscr.addField(field); + + + + CustomFixedComboField ccf = new CustomFixedComboField(); + ccf.visible = true; + ccf.name = "Экраны"; + ccf.db = "screenEdit"; + ccf.isEditable = true; + ccf.search.mode = CustomField.Search.SEARCH_MODES.NONE; + + for(int ID : application.mapMenuID.keySet()){ + MenuElement menuElement = application.mapMenuID.get(ID); + ccf.add(new CustomFixedComboField.Element(menuElement.ID, menuElement.name, null)); + } + ccf.isMust = true; + dscr.addField(ccf); + + + Set setBlockedRecords = Collections.singleton(0); + + + DBListPanel panel = new DBListPanel(application, + MRole.class, + dscr, + Dimension.getFull(application), + setMode, + new Constraint(), + setBlockedRecords); + return panel; + } + + + + + + @Override + public DBSingle build(int ID){ + // TODO Auto-generated method stub + return null; + } + + + + + + + + + + +// public static DBListPanel buildWrite(AdminMain application, ViewConstants.EditMode editMode){ +// CustomDescriptor dscr = new CustomDescriptor(); +// +// CustomField field = new CustomField(); +// field.visible = true; +// field.search.mode = CustomField.Search.SEARCH_MODES.INTEGER; +// field.name = "ID"; +// field.db = "ID"; +// field.isEditable = false; +// field.style.width = 50; +// field.isSortable = true; +// field.search.row = 0; +// dscr.addField(field); +// +// +// +// field = new CustomField(); +// field.visible = true; +// field.name = "Название"; +// field.db = "name"; +// field.isEditable = true; +// field.style.width = 150; +// field.isMust = true; +// field.search.mode = CustomField.Search.SEARCH_MODES.LOCALIZED_STRING; +// dscr.addField(field); +// +// +// +// CustomComboField ccf = new CustomComboField(); +// ccf.visible = true; +// ccf.name = "Экраны"; +// ccf.db = "screenWrite"; +// ccf.isEditable = true; +// ccf.search.mode = CustomField.Search.SEARCH_MODES.NONE; +// +// for(int ID : application.mapMenuID.keySet()){ +// MenuElement menuElement = application.mapMenuID.get(ID); +// ccf.add(new CustomComboField.Element(menuElement.ID, menuElement.name, null)); +// } +// ccf.isMust = true; +// dscr.addField(ccf); +// +// +// Set setBlockedRecords = Collections.singleton(0); +// +// +// DBListPanel panel = new DBListPanel(application, +// MRole.class, +// dscr, +// Dimension.getFull(application), +// setMode, +// new Constraint(), +// setBlockedRecords); +// return panel; +// } +} + diff --git a/kz_cafe_admin/src/kz/cafe/admin/TabRoleRead.java b/kz_cafe_admin/src/kz/cafe/admin/TabRoleRead.java new file mode 100644 index 0000000..dfaae8f --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/TabRoleRead.java @@ -0,0 +1,158 @@ +package kz.cafe.admin; + +import java.util.*; +import kz.cafe.admin.AdminMain.MenuElement; +import kz.cafe.admin.constants.AccessConstants.EditMode; +import kz.cafe.admin.panels.*; +import kz.cafe.admin.panels.model.*; +import kz.cafe.db.*; +import kz.cafe.db.model.*; + + +public class TabRoleRead extends AbstractTab{ + private static final long serialVersionUID = 6848484607125250160L; + + + + + + public TabRoleRead(AdminMain application, Set setMode){ + super(application, setMode); + } + + + + + @Override + public DBListPanel build(){ + CustomDescriptor dscr = new CustomDescriptor(); + + CustomField field = new CustomField(); + field.visible = true; + field.search.mode = CustomField.Search.SEARCH_MODES.INTEGER; + field.name = "ID"; + field.db = "ID"; + field.isEditable = false; + field.style.width = 50; + field.isSortable = true; + field.search.row = 0; + dscr.addField(field); + + + + field = new CustomField(); + field.visible = true; + field.name = "Название"; + field.db = "name"; + field.isEditable = true; + field.style.width = 150; + field.isMust = true; + field.search.mode = CustomField.Search.SEARCH_MODES.LOCALIZED_STRING; + dscr.addField(field); + + + + CustomFixedComboField ccf = new CustomFixedComboField(); + ccf.visible = true; + ccf.name = "Экраны"; + ccf.db = "screenRead"; + ccf.isEditable = true; + ccf.search.mode = CustomField.Search.SEARCH_MODES.NONE; + + for(int ID : application.mapMenuID.keySet()){ + MenuElement menuElement = application.mapMenuID.get(ID); + ccf.add(new CustomFixedComboField.Element(menuElement.ID, menuElement.name, null)); + } + ccf.isMust = true; + dscr.addField(ccf); + + + Set setBlockedRecords = Collections.singleton(0); + + + DBListPanel panel = new DBListPanel(application, + MRole.class, + dscr, + Dimension.getFull(application), + setMode, + new Constraint(), + setBlockedRecords); + return panel; + } + + + + + + @Override + public DBSingle build(int ID){ + // TODO Auto-generated method stub + return null; + } + + + + + + + + + + +// public static DBListPanel buildWrite(AdminMain application, ViewConstants.EditMode editMode){ +// CustomDescriptor dscr = new CustomDescriptor(); +// +// CustomField field = new CustomField(); +// field.visible = true; +// field.search.mode = CustomField.Search.SEARCH_MODES.INTEGER; +// field.name = "ID"; +// field.db = "ID"; +// field.isEditable = false; +// field.style.width = 50; +// field.isSortable = true; +// field.search.row = 0; +// dscr.addField(field); +// +// +// +// field = new CustomField(); +// field.visible = true; +// field.name = "Название"; +// field.db = "name"; +// field.isEditable = true; +// field.style.width = 150; +// field.isMust = true; +// field.search.mode = CustomField.Search.SEARCH_MODES.LOCALIZED_STRING; +// dscr.addField(field); +// +// +// +// CustomComboField ccf = new CustomComboField(); +// ccf.visible = true; +// ccf.name = "Экраны"; +// ccf.db = "screenWrite"; +// ccf.isEditable = true; +// ccf.search.mode = CustomField.Search.SEARCH_MODES.NONE; +// +// for(int ID : application.mapMenuID.keySet()){ +// MenuElement menuElement = application.mapMenuID.get(ID); +// ccf.add(new CustomComboField.Element(menuElement.ID, menuElement.name, null)); +// } +// ccf.isMust = true; +// dscr.addField(ccf); +// +// +// Set setBlockedRecords = Collections.singleton(0); +// +// +// DBListPanel panel = new DBListPanel(application, +// MRole.class, +// dscr, +// Dimension.getFull(application), +// setMode, +// new Constraint(), +// setBlockedRecords); +// return panel; +// } +} + diff --git a/kz_cafe_admin/src/kz/cafe/admin/TabSales.java b/kz_cafe_admin/src/kz/cafe/admin/TabSales.java new file mode 100644 index 0000000..916fc61 --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/TabSales.java @@ -0,0 +1,375 @@ +package kz.cafe.admin; + +import java.util.*; +import kz.cafe.admin.constants.AccessConstants.EditMode; +import kz.cafe.admin.panel_extensions.*; +import kz.cafe.admin.panels.*; +import kz.cafe.admin.panels.model.*; +import kz.cafe.db.*; +import kz.cafe.db.model.*; + + + + +public class TabSales extends AbstractTab{ + private static final long serialVersionUID = 4709132217006270683L; + + + + + + public TabSales(AdminMain application, Set setMode){ + super(application, setMode); + } + + + + + @Override + public DBListPanel build(){ + CustomDescriptor dscr = new CustomDescriptor(); + + CustomField field = new CustomField(); + field.visible = true; + field.search.mode = CustomField.Search.SEARCH_MODES.INTEGER; + field.name = "ID"; + field.db = "ID"; + field.isEditable = false; + field.style.width = 50; + field.isSortable = true; + field.search.row = 0; + dscr.addField(field); + + + CustomImageField fieldLogo = new CustomImageField(); + fieldLogo.visible = true; + fieldLogo.name = "Логотип"; + fieldLogo.db = "image"; + fieldLogo.isEditable = true; + fieldLogo.style.width = 40; + fieldLogo.style.height = 40; + fieldLogo.isImageInTable = true; + dscr.addField(fieldLogo); + + + + + field = new CustomField(); + field.visible = true; + field.name = "Название"; + field.db = "name"; + field.isEditable = true; + field.style.width = 200; + field.isMust = true; + field.search.mode = CustomField.Search.SEARCH_MODES.LOCALIZED_STRING; + dscr.addField(field); + + + + + field = new CustomField(); + field.visible = true; + field.name = "Описание"; + field.db = "description"; + field.isEditable = true; + field.style.width = 0; + field.search.mode = CustomField.Search.SEARCH_MODES.LOCALIZED_STRING; + field.search.row = 0; + dscr.addField(field); + + + + + + + + + + CustomFixedComboField ccf = new CustomFixedComboField(); + ccf.visible = true; + ccf.name = "Объект"; + ccf.db = "CID"; + ccf.isEditable = true; + ccf.style.width = 120; + ccf.isMust = true; + ccf.search.row = 1; + dscr.addField(ccf); + + + + + field = new CustomField(); + field.visible = true; + field.name = "На главной"; + field.db = "showMainScreen"; + field.isEditable = true; + field.style.width = 100; + field.isSortable = true; + field.search.mode = CustomField.Search.SEARCH_MODES.BOOLEAN_ONLY_TRUE; + field.search.row = 3; + dscr.addField(field); + + field = new CustomField(); + field.visible = true; + field.name = "В новостях"; + field.db = "showNews"; + field.isEditable = true; + field.style.width = 100; + field.isSortable = true; + field.search.mode = CustomField.Search.SEARCH_MODES.BOOLEAN_ONLY_TRUE; + field.search.row = 3; + dscr.addField(field); + + + + + + if(application.isAdmin){ + ccf = new CustomFixedComboField(); + ccf.visible = true; + ccf.name = "Владелец"; + ccf.db = MAbstractDataElement.F_OWNER_ID; + ccf.isEditable = true; + ccf.style.width = 120; + ccf.isMust = true; + //ccf.search.mode = CustomField.Search.SEARCH_MODES.NONE; + ccf.search.row = 2; + dscr.addField(ccf); + } + + + + + + CustomDateField dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "Начало"; + dateField.db = "date_from"; + dateField.isEditable = true; + dateField.style.width = 120; + dateField.isSortable = true; + dateField.search.mode = CustomField.Search.SEARCH_MODES.DATE_RANGE; + dateField.search.row = 1; + dscr.addField(dateField); + + + dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "Конец"; + dateField.db = "date_to"; + dateField.isEditable = true; + dateField.style.width = 120; + dateField.isSortable = true; + dateField.search.mode = CustomField.Search.SEARCH_MODES.DATE_RANGE; + dateField.search.row = 1; + dscr.addField(dateField); + + + + dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "Известить"; + dateField.db = "date_notification"; + dateField.isEditable = true; + dateField.style.width = 120; + dateField.isSortable = true; + dateField.search.mode = CustomField.Search.SEARCH_MODES.DATE_RANGE; + dateField.search.row = 1; + dscr.addField(dateField); + + + + + field = new CustomField(); + field.visible = true; + field.name = "Опубликовано"; + field.db = "published"; + field.isEditable = true; + field.style.width = 40; + field.isSortable = true; + field.search.mode = CustomField.Search.SEARCH_MODES.BOOLEAN_ONLY_TRUE; + field.search.row = 1; + dscr.addField(field); + + + Constraint constraint = new Constraint(); + + if(application.isAdmin){ + } + else{ + constraint.criteria.add(new Constraint.Criterion(MUser.F_OWNER_ID, application.UID)); + } + + + + DBListPanel panel = new DBListPanel(application, + MSale.class, + dscr, + Dimension.getFull(application), + setMode, + constraint); + panel.addPanel(new ExtraPanelImageUploader(panel, fieldLogo), false); +// panel.addPanel(new ExtraPanelMany2Many(application, "Проходит в ...", MCafe.class, new HashSet(), ViewConstants.EditMode.NONE, panel), false); + + + return panel; + } + + + + + + @Override + public DBSingle build(int ID){ + CustomDescriptor dscr = new CustomDescriptor(); + + CustomField field = new CustomField(); + field.visible = true; + field.search.mode = CustomField.Search.SEARCH_MODES.INTEGER; + field.name = "ID"; + field.db = "ID"; + field.isEditable = false; + field.style.width = 50; + field.isSortable = true; + field.search.row = 0; + dscr.addField(field); + + + CustomImageField fieldLogo = new CustomImageField(); + fieldLogo.visible = true; + fieldLogo.name = "Логотип"; + fieldLogo.db = "image"; + fieldLogo.isEditable = true; + fieldLogo.style.width = 40; + fieldLogo.style.height = 40; + fieldLogo.isImageInTable = true; + dscr.addField(fieldLogo); + + + + + field = new CustomField(); + field.visible = true; + field.name = "Название"; + field.db = "name"; + field.isEditable = true; + field.style.width = 200; + field.isMust = true; + field.search.mode = CustomField.Search.SEARCH_MODES.LOCALIZED_STRING; + dscr.addField(field); + + + + + field = new CustomField(); + field.visible = true; + field.name = "Описание"; + field.db = "description"; + field.isEditable = true; + field.style.width = 0; + field.search.mode = CustomField.Search.SEARCH_MODES.LOCALIZED_STRING; + field.search.row = 0; + dscr.addField(field); + + + + + + + + + + CustomFixedComboField ccf = new CustomFixedComboField(); + ccf.visible = true; + ccf.name = "Объект"; + ccf.db = "CID"; + ccf.isEditable = true; + ccf.style.width = 120; + ccf.isMust = true; + ccf.search.row = 1; + dscr.addField(ccf); + + + + + if(application.isAdmin){ + ccf = new CustomFixedComboField(); + ccf.visible = true; + ccf.name = "Владелец"; + ccf.db = MAbstractDataElement.F_OWNER_ID; + ccf.isEditable = true; + ccf.style.width = 120; + ccf.isMust = true; + //ccf.search.mode = CustomField.Search.SEARCH_MODES.NONE; + ccf.search.row = 2; + dscr.addField(ccf); + } + + + + + + CustomDateField dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "Начало"; + dateField.db = "date_from"; + dateField.isEditable = false; + dateField.style.width = 120; + dateField.isSortable = true; + dateField.search.mode = CustomField.Search.SEARCH_MODES.DATE_RANGE; + dateField.search.row = 1; + dscr.addField(dateField); + + + dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "Конец"; + dateField.db = "date_to"; + dateField.isEditable = false; + dateField.style.width = 120; + dateField.isSortable = true; + dateField.search.mode = CustomField.Search.SEARCH_MODES.DATE_RANGE; + dateField.search.row = 1; + dscr.addField(dateField); + + + + dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "Известить"; + dateField.db = "date_notification"; + dateField.isEditable = false; + dateField.style.width = 120; + dateField.isSortable = true; + dateField.search.mode = CustomField.Search.SEARCH_MODES.DATE_RANGE; + dateField.search.row = 1; + dscr.addField(dateField); + + + + + field = new CustomField(); + field.visible = true; + field.name = "Опубликовано"; + field.db = "published"; + field.isEditable = true; + field.style.width = 40; + field.isSortable = true; + field.search.mode = CustomField.Search.SEARCH_MODES.BOOLEAN_ONLY_TRUE; + field.search.row = 1; + dscr.addField(field); + + + + DBSingle panel = new DBSingle(application, + MSale.class, + ID, + dscr, + Dimension.get80(application), + setMode + ); + + return panel; + } +} + diff --git a/kz_cafe_admin/src/kz/cafe/admin/TabServiceType.java b/kz_cafe_admin/src/kz/cafe/admin/TabServiceType.java new file mode 100644 index 0000000..165c478 --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/TabServiceType.java @@ -0,0 +1,159 @@ +package kz.cafe.admin; + +import java.util.*; +import kz.cafe.admin.constants.AccessConstants.EditMode; +import kz.cafe.admin.panel_extensions.*; +import kz.cafe.admin.panels.*; +import kz.cafe.admin.panels.model.*; +import kz.cafe.db.model.*; + + +public class TabServiceType extends AbstractTab{ + private static final long serialVersionUID = -5281394170937761954L; + + + + + public TabServiceType(AdminMain application, Set setMode){ + super(application, setMode); + } + + + + + @Override + public DBListPanel build(){ + CustomDescriptor dscr = new CustomDescriptor(); + + CustomField field = new CustomField(); + field.visible = true; + field.search.mode = CustomField.Search.SEARCH_MODES.INTEGER; + field.name = "ID"; + field.db = "ID"; + field.isEditable = false; + field.style.width = 50; + field.isSortable = true; + field.search.row = 0; + dscr.addField(field); + + + + field = new CustomField(); + field.visible = true; + field.name = "Название"; + field.db = "name"; + field.isEditable = true; + field.style.width = 150; + field.isMust = true; + field.search.mode = CustomField.Search.SEARCH_MODES.LOCALIZED_STRING; + dscr.addField(field); + + + + + + + + + field = new CustomField(); + field.visible = true; + //field.searchable = CustomField.SEARCH_MODES.INTEGER; + + field.name = "Описание"; + field.db = "description"; + field.isEditable = true; + field.style.width = 0; + field.search.mode = CustomField.Search.SEARCH_MODES.LOCALIZED_STRING; + dscr.addField(field); + + + + + CustomImageField fieldImage = new CustomImageField(); + fieldImage.visible = true; + fieldImage.name = "Изображение"; + fieldImage.db = "image"; + fieldImage.isEditable = true; + fieldImage.style.width = 40; + fieldImage.style.height = 40; + fieldImage.isImageInTable = true; + dscr.addField(fieldImage); + + + + + + + + CustomDateField dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "Создан"; + dateField.db = "created"; + dateField.isEditable = false; + dateField.style.width = 120; + dateField.isSortable = true; + dateField.search.mode = CustomField.Search.SEARCH_MODES.DATE_RANGE; + dateField.search.row = 1; + dscr.addField(dateField); + + + + + + dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "Обновлен"; + dateField.db = "updated"; + dateField.isEditable = false; + dateField.style.width = 120; + dateField.isSortable = true; + dateField.search.mode = CustomField.Search.SEARCH_MODES.DATE_RANGE; + dateField.search.row = 1; + dscr.addField(dateField); + + + + field = new CustomField(); + field.visible = true; + field.name = "Опубликовано"; + field.db = "published"; + field.isEditable = true; + field.style.width = 40; + field.isSortable = true; + field.search.mode = CustomField.Search.SEARCH_MODES.BOOLEAN_ONLY_TRUE; + field.search.row = 1; + dscr.addField(field); + + + + field = new CustomField(); + field.visible = true; + field.search.mode = CustomField.Search.SEARCH_MODES.INTEGER; + field.name = "Порядок"; + field.db = "order"; + field.isEditable = true; + field.style.width = 50; + field.isSortable = true; + field.style.expandable = false; + field.search.row = 0; + dscr.addField(field); + + + + DBListPanel panel = new DBListPanel(application, MServiceType.class, dscr, Dimension.getFull(application), setMode); + panel.addPanel(new ExtraPanelImageUploader(panel, (CustomImageField) dscr.mapDBFields.get("image")), false); + //panelCourse.addPanel(new ExtraPanelImageViewer(panelCourse, fieldImage, 50), true); + + return panel; + } + + + + + @Override + public DBSingle build(int ID){ + // TODO Auto-generated method stub + return null; + } +} + diff --git a/kz_cafe_admin/src/kz/cafe/admin/TabStatisticsDate.java b/kz_cafe_admin/src/kz/cafe/admin/TabStatisticsDate.java new file mode 100644 index 0000000..b44c4b7 --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/TabStatisticsDate.java @@ -0,0 +1,66 @@ +package kz.cafe.admin; + +import java.util.*; +import kz.cafe.admin.constants.AccessConstants.EditMode; +import kz.cafe.admin.panels.*; +import kz.cafe.admin.panels.model.*; +import kz.cafe.db.model.*; + + + + +public class TabStatisticsDate extends TabAbstractStatistics{ + private static final long serialVersionUID = 7328279321531795708L; + + + + + public TabStatisticsDate(AdminMain application, Set setMode){ + super(application, setMode); + } + + + + @Override + public DBListPanel build(){ + CustomDescriptor dscr = new CustomDescriptor(); + + CustomField field = new CustomField(); + field.visible = false; + field.search.mode = CustomField.Search.SEARCH_MODES.INTEGER; + field.name = "ID"; + field.db = "ID"; + field.isEditable = false; + field.style.width = 50; + field.isSortable = true; + field.search.row = 0; + dscr.addField(field); + + CustomDateField dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "Дата"; + dateField.db = "date"; + dateField.isEditable = false; + dateField.style.width = 0; + dateField.isSortable = true; + dateField.search.mode = CustomField.Search.SEARCH_MODES.DATE_RANGE; + dateField.search.row = 0; + dateField.format = "dd-MM-YYYY"; + dscr.addField(dateField); + + common(dscr); + + DBListPanel panel = new DBListPanel(application, MStatisticDate.class, dscr, Dimension.getFull(application), setMode); + return panel; + } + + + + + @Override + public DBSingle build(int ID){ + // TODO Auto-generated method stub + return null; + } +} + diff --git a/kz_cafe_admin/src/kz/cafe/admin/TabStatisticsIP.java b/kz_cafe_admin/src/kz/cafe/admin/TabStatisticsIP.java new file mode 100644 index 0000000..d500635 --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/TabStatisticsIP.java @@ -0,0 +1,64 @@ +package kz.cafe.admin; + +import java.util.*; +import kz.cafe.admin.constants.AccessConstants.EditMode; +import kz.cafe.admin.panels.*; +import kz.cafe.admin.panels.model.*; +import kz.cafe.db.model.*; + + +public class TabStatisticsIP extends TabAbstractStatistics{ + private static final long serialVersionUID = 9038535695439737388L; + + + + public TabStatisticsIP(AdminMain application, Set setMode){ + super(application, setMode); + } + + + + + @Override + public DBListPanel build(){ + CustomDescriptor dscr = new CustomDescriptor(); + + CustomField field = new CustomField(); + field.visible = false; + field.search.mode = CustomField.Search.SEARCH_MODES.INTEGER; + field.name = "ID"; + field.db = "ID"; + field.isEditable = false; + field.style.width = 50; + field.isSortable = true; + field.search.row = 0; + dscr.addField(field); + + + field = new CustomField(); + field.visible = true; + field.search.mode = CustomField.Search.SEARCH_MODES.STRING; + field.name = "IP"; + field.db = "IP"; + field.isEditable = false; + field.style.width = 0; + field.isSortable = true; + field.search.row = 0; + dscr.addField(field); + + + + common(dscr); + + DBListPanel panel = new DBListPanel(application, MStatisticIP.class, dscr, Dimension.getFull(application), setMode); + return panel; + } + + + + @Override + public DBSingle build(int ID){ + return null; + } +} + diff --git a/kz_cafe_admin/src/kz/cafe/admin/TabUserAdmins.java b/kz_cafe_admin/src/kz/cafe/admin/TabUserAdmins.java new file mode 100644 index 0000000..48c57d9 --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/TabUserAdmins.java @@ -0,0 +1,292 @@ +package kz.cafe.admin; + +import java.util.*; +import kz.cafe.admin.constants.AccessConstants.EditMode; +import kz.cafe.admin.panel_extensions.*; +import kz.cafe.admin.panels.*; +import kz.cafe.admin.panels.model.*; +import kz.cafe.db.*; +import kz.cafe.db.model.*; + +public class TabUserAdmins extends AbstractTab{ + private static final long serialVersionUID = -1706114739544793452L; + + + + + + + + public TabUserAdmins(AdminMain application, Set setMode){ + super(application, setMode); + } + + + + + + + + public static CustomDescriptor descriptorAdmin(AdminMain application){ + CustomDescriptor dscr = new CustomDescriptor(); + + CustomField field = new CustomField(); + field.visible = true; + field.search.mode = CustomField.Search.SEARCH_MODES.INTEGER; + field.name = "ID"; + field.db = "ID"; + field.isEditable = false; + field.style.width = 30; + field.isSortable = true; + field.search.row = 0; + dscr.addField(field); + + + + + + field = new CustomField(); + field.visible = true; + field.name = "Логин"; + field.db = "login"; + field.isEditable = true; + field.style.width = 100; + field.isMust = true; + field.search.mode = CustomField.Search.SEARCH_MODES.STRING; + dscr.addField(field); + + + + CustomPassword fieldPassword = new CustomPassword(); + fieldPassword.visible = true; + fieldPassword.name = "Пароль"; + fieldPassword.db = "password"; + fieldPassword.isEditable = true; + fieldPassword.style.width = 100; + fieldPassword.isMust = true; + fieldPassword.search.mode = CustomField.Search.SEARCH_MODES.STRING; + dscr.addField(fieldPassword); + + + + + + + CustomFixedComboField ccf = new CustomFixedComboField(); + ccf.visible = true; + ccf.name = "Роль"; + ccf.db = "role"; + ccf.isEditable = true; + ccf.style.width = 100; + ccf.isMust = true; + dscr.addField(ccf); + + + + + + + field = new CustomField(); + field.visible = true; + field.name = "Активен"; + field.db = "active"; + field.isEditable = true; + field.style.width = 20; + field.isSortable = true; + field.search.mode = CustomField.Search.SEARCH_MODES.BOOLEAN_ONLY_TRUE; + field.search.row = 2; + dscr.addField(field); + + + + + CustomImageField fieldImage = new CustomImageField(); + fieldImage.visible = true; + fieldImage.name = "Аватар"; + fieldImage.db = "image"; + fieldImage.isEditable = true; + fieldImage.style.width = 35; + fieldImage.style.height = 35; + fieldImage.isImageInTable = true; + dscr.addField(fieldImage); + + + + + + + field = new CustomField(); + field.visible = true; + field.name = "Язык"; + field.db = "lang"; + field.isEditable = false; + field.style.width = 30; + field.search.mode = CustomField.Search.SEARCH_MODES.STRING; + field.search.row = 1; + dscr.addField(field); + + + + + + + + field = new CustomField(); + field.visible = true; + field.name = "Имя"; + field.db = "name"; + field.isEditable = true; + //field.style.width = 100; + field.search.mode = CustomField.Search.SEARCH_MODES.STRING; + field.search.row = 1; + dscr.addField(field); + + + + + field = new CustomField(); + field.visible = true; + //field.searchable = CustomField.SEARCH_MODES.INTEGER; + field.name = "Телефон"; + field.db = "phone"; + field.isEditable = true; + //field.style.width = 100; + field.search.mode = CustomField.Search.SEARCH_MODES.STRING; + field.search.row = 1; + dscr.addField(field); + + + + + + + ccf = new CustomFixedComboField(); + ccf.visible = true; + ccf.name = "Город"; + ccf.db = "city"; + ccf.isEditable = true; + ccf.style.width = 100; + ccf.isMust = false; + ccf.search.row = 1; + dscr.addField(ccf); + + + + + field = new CustomField(); + field.visible = true; + field.name = "Почт. увед."; + field.db = "hasEmailNotifications"; + field.isEditable = true; + field.style.width = 80; + field.isSortable = true; + field.search.mode = CustomField.Search.SEARCH_MODES.BOOLEAN_ONLY_TRUE; + field.search.row = 2; + dscr.addField(field); + + + + + + + CustomDateField dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "Создан"; + dateField.db = "created"; + dateField.isEditable = false; + dateField.style.width = 120; + dateField.isSortable = true; + dateField.search.mode = CustomField.Search.SEARCH_MODES.DATE_RANGE; + dateField.search.row = 2; + dscr.addField(dateField); + + + + + + dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "Последний вход"; + dateField.db = "updated"; + dateField.isEditable = false; + dateField.style.width = 120; + dateField.isSortable = true; + dateField.search.mode = CustomField.Search.SEARCH_MODES.DATE_RANGE; + dateField.search.row = 2; + dscr.addField(dateField); + + + + + field = new CustomField(); + field.visible = true; + field.name = "GUI"; + field.db = "canUseGUI"; + field.isEditable = true; + field.style.width = 20; + field.isSortable = true; + field.search.mode = CustomField.Search.SEARCH_MODES.BOOLEAN_ONLY_TRUE; + field.search.row = 2; + dscr.addField(field); + + + return dscr; + } + + + + + + + + @Override + public DBListPanel build(){ + CustomDescriptor dscr = descriptorAdmin(application); + + Constraint constraint = new Constraint(); + constraint.criteria.add(new Constraint.Criterion(MUser.F_CAN_USE_GUI, true)); + + + //Set setBlockedRecords = Collections.singleton(0); + Set setBlockedRecords = Collections.emptySet(); + + + DBListPanel panel = new DBListPanel(application, + MUser.class, + dscr, + Dimension.getFull(application), + setMode, + constraint, + setBlockedRecords); + panel.addPanel(new ExtraPanelImageUploader(panel, (CustomImageField) dscr.mapDBFields.get(MAbstractDescriptor.F_IMAGE)), false); + //panelCourse.addPanel(new ExtraPanelImageViewer(panelCourse, fieldImage, 50), true); + + return panel; + } + + + + + + + + @Override + public DBSingle build(int ID){ + CustomDescriptor dscr = descriptorAdmin(application); + + + DBSingle panel = new DBSingle(application, + MUser.class, + ID, + dscr, + Dimension.getFull(application), + setMode + ); + + return panel; + } +} + + + + diff --git a/kz_cafe_admin/src/kz/cafe/admin/TabUserClients.java b/kz_cafe_admin/src/kz/cafe/admin/TabUserClients.java new file mode 100644 index 0000000..96007fb --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/TabUserClients.java @@ -0,0 +1,318 @@ +package kz.cafe.admin; + +import java.util.*; +import kz.cafe.admin.constants.AccessConstants.EditMode; +import kz.cafe.admin.panel_extensions.*; +import kz.cafe.admin.panels.*; +import kz.cafe.admin.panels.model.*; +import kz.cafe.db.*; +import kz.cafe.db.model.*; + + + + +public class TabUserClients extends AbstractTab{ + private static final long serialVersionUID = 6486710312950457250L; + + + public TabUserClients(AdminMain application, Set setMode){ + super(application, setMode); + } + + + + + + + + public static CustomDescriptor descriptorClient(AdminMain application){ + CustomDescriptor dscr = new CustomDescriptor(); + + CustomField field = new CustomField(); + field.visible = true; + field.search.mode = CustomField.Search.SEARCH_MODES.INTEGER; + field.name = "ID"; + field.db = "ID"; + field.isEditable = false; + field.style.width = 30; + field.isSortable = true; + field.search.row = 0; + dscr.addField(field); + + + + + + field = new CustomField(); + field.visible = true; + field.name = "Логин"; + field.db = "login"; + field.isEditable = true; + field.style.width = 100; + field.isMust = true; + field.search.mode = CustomField.Search.SEARCH_MODES.STRING; + dscr.addField(field); + + + + CustomPassword fieldPassword = new CustomPassword(); + fieldPassword.visible = true; + fieldPassword.name = "Пароль"; + fieldPassword.db = "password"; + fieldPassword.isEditable = true; + fieldPassword.style.width = 100; + fieldPassword.isMust = true; + fieldPassword.search.mode = CustomField.Search.SEARCH_MODES.STRING; + dscr.addField(fieldPassword); + + + + + field = new CustomField(); + field.visible = true; + field.name = "Активен"; + field.db = "active"; + field.isEditable = true; + field.style.width = 20; + field.isSortable = true; + field.search.mode = CustomField.Search.SEARCH_MODES.BOOLEAN_ONLY_TRUE; + field.search.row = 2; + dscr.addField(field); + + + + + field = new CustomField(); + field.visible = true; + field.name = "Email подтвержден"; + field.db = MUser.F_EMAIL_CONFIRMED; + field.isEditable = true; + field.style.width = 30; + field.isSortable = true; + field.search.mode = CustomField.Search.SEARCH_MODES.BOOLEAN_ONLY_TRUE; + field.search.row = 2; + dscr.addField(field); + + + + + + CustomImageField fieldImage = new CustomImageField(); + fieldImage.visible = true; + fieldImage.name = "Аватар"; + fieldImage.db = "image"; + fieldImage.isEditable = true; + fieldImage.style.width = 35; + fieldImage.style.height = 35; + fieldImage.isImageInTable = true; + dscr.addField(fieldImage); + + + + + + + field = new CustomField(); + field.visible = true; + field.name = "Язык"; + field.db = "lang"; + field.isEditable = false; + field.style.width = 30; + field.search.mode = CustomField.Search.SEARCH_MODES.STRING; + field.search.row = 1; + dscr.addField(field); + + + + + + + + field = new CustomField(); + field.visible = true; + field.name = "Имя"; + field.db = "name"; + field.isEditable = true; + //field.style.width = 100; + field.search.mode = CustomField.Search.SEARCH_MODES.STRING; + field.search.row = 1; + dscr.addField(field); + + + + + field = new CustomField(); + field.visible = true; + //field.searchable = CustomField.SEARCH_MODES.INTEGER; + field.name = "Телефон"; + field.db = "phone"; + field.isEditable = true; + //field.style.width = 100; + field.search.mode = CustomField.Search.SEARCH_MODES.STRING; + field.search.row = 1; + dscr.addField(field); + + + + + + + CustomFixedComboField ccf = new CustomFixedComboField(); + ccf.visible = true; + ccf.name = "Город"; + ccf.db = "city"; + ccf.isEditable = true; + ccf.style.width = 100; + ccf.isMust = true; + ccf.search.row = 1; + dscr.addField(ccf); + + + + + + field = new CustomField(); + field.visible = true; + field.search.mode = CustomField.Search.SEARCH_MODES.INTEGER; + field.name = "Заказов сделано"; + field.db = "cntrOrdersTotal"; + field.isEditable = false; + field.style.width = 110; + field.isSortable = true; + field.search.row = 0; + dscr.addField(field); + + + + + + field = new CustomField(); + field.visible = true; + field.search.mode = CustomField.Search.SEARCH_MODES.INTEGER; + field.name = "Оплачено"; + field.db = "cntrOrdersPaid"; + field.isEditable = false; + field.style.width = 60; + field.isSortable = true; + field.search.row = 0; + dscr.addField(field); + + + + field = new CustomField(); + field.visible = true; + field.search.mode = CustomField.Search.SEARCH_MODES.NONE; + field.name = "Устройство"; + field.db = "device"; + field.isEditable = false; + field.style.width = 300; + field.isSortable = true; + field.search.row = 0; + dscr.addField(field); + + + + + + CustomDateField dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "Создан"; + dateField.db = "created"; + dateField.isEditable = false; + dateField.style.width = 120; + dateField.isSortable = true; + dateField.search.mode = CustomField.Search.SEARCH_MODES.DATE_RANGE; + dateField.search.row = 2; + dscr.addField(dateField); + + + + + + dateField = new CustomDateField(); + dateField.visible = true; + dateField.name = "Последний вход"; + dateField.db = "updated"; + dateField.isEditable = false; + dateField.style.width = 120; + dateField.isSortable = true; + dateField.search.mode = CustomField.Search.SEARCH_MODES.DATE_RANGE; + dateField.search.row = 2; + dscr.addField(dateField); + + + + + field = new CustomField(); + field.visible = true; + field.name = "GUI"; + field.db = "canUseGUI"; + field.isEditable = true; + field.style.width = 20; + field.isSortable = true; + field.search.mode = CustomField.Search.SEARCH_MODES.BOOLEAN_ONLY_TRUE; + field.search.row = 2; + dscr.addField(field); + + + return dscr; + } + + + + + + + + @Override + public DBListPanel build(){ + CustomDescriptor dscr = descriptorClient(application); + + Constraint constraint = new Constraint(); + constraint.criteria.add(new Constraint.Criterion(MUser.F_CAN_USE_GUI, false)); + + Set setBlockedRecords = Collections.singleton(0); + + + DBListPanel panel = new DBListPanel(application, + MUser.class, + dscr, + Dimension.getFull(application), + setMode, + constraint, + setBlockedRecords); + panel.addPanel(new ExtraPanelImageUploader(panel, (CustomImageField) dscr.mapDBFields.get(MAbstractDescriptor.F_IMAGE)), false); + //panelCourse.addPanel(new ExtraPanelImageViewer(panelCourse, fieldImage, 50), true); + + return panel; + } + + + + + + + + + + + @Override + public DBSingle build(int ID){ + CustomDescriptor dscr = descriptorClient(application); + + + DBSingle panel = new DBSingle(application, + MUser.class, + ID, + dscr, + Dimension.getFull(application), + setMode + ); + + return panel; + } +} + + + + diff --git a/kz_cafe_admin/src/kz/cafe/admin/autoimport/CommandLine.java b/kz_cafe_admin/src/kz/cafe/admin/autoimport/CommandLine.java new file mode 100644 index 0000000..24d6fcd --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/autoimport/CommandLine.java @@ -0,0 +1,13 @@ +package kz.cafe.admin.autoimport; + +public class CommandLine{ + + /** + * @param args + * @throws Exception + */ + public static void main(String[] args) throws Exception{ + Importer.importLogic("c:/data.xls"); + } + +} diff --git a/kz_cafe_admin/src/kz/cafe/admin/autoimport/Importer.java b/kz_cafe_admin/src/kz/cafe/admin/autoimport/Importer.java new file mode 100644 index 0000000..87ae693 --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/autoimport/Importer.java @@ -0,0 +1,415 @@ +package kz.cafe.admin.autoimport; + +import java.io.*; +import java.util.*; +import kz.cafe.admin.autoimport.exceptions.*; +import kz.cafe.admin.autoimport.model.*; +import kz.cafe.constants.*; +import kz.cafe.db.*; +import kz.cafe.db.model.*; +import kz.cafe.logs.*; +import org.apache.commons.logging.*; +import org.apache.poi.hssf.usermodel.*; +import org.apache.poi.poifs.filesystem.*; +import org.apache.poi.ss.usermodel.*; + +public class Importer{ + private static Log log = LogFactory.getLog(Importer.class); + private static final String LOG = "[XLS Import] "; + + + private static Map mapCafes = new HashMap(); + private static Map mapCategories = new HashMap(); + private static Map mapIngredients = new HashMap(); + private static List listMeals = new ArrayList(); + + + public static List importLogic(String sFile) throws ImportException{ + List listErrors = new ArrayList(); + + /** Create a workbook using the File System **/ + HSSFWorkbook myWorkBook; + try{ + FileInputStream myInput = new FileInputStream(sFile); + + /** Create a POIFSFileSystem object **/ + POIFSFileSystem myFileSystem = new POIFSFileSystem(myInput); + + myWorkBook = new HSSFWorkbook(myFileSystem); + } + catch (Exception e){ + throw new ImportException(-1, -1, "I/O problem:" + e.toString()); + } + + /** Get the first sheet from workbook **/ + HSSFSheet mySheet = myWorkBook.getSheetAt(0); + + + /** We now need something to iterate through the cells. **/ + Iterator rowIter = mySheet.rowIterator(); + + + PCafe pCafe = null; + + HSSFRow myRow; + int iRowNumber = 0; + while (rowIter.hasNext()){ + + int iCellNumber = 0; + try{ + myRow = (HSSFRow) rowIter.next(); + + iRowNumber++; + + if(iRowNumber == 1){ + //let's skip the header row + continue; + } + + + int iIndex; + Iterator cellIter = myRow.cellIterator(); + + HSSFCell cellTmp = (HSSFCell) cellIter.next(); + iCellNumber++; + + iIndex = cellTmp.getColumnIndex(); + + PCategory pCategory; + if(iIndex == 0){ + PCafe tmp = processCafe(myWorkBook, cellTmp); + if(tmp == null){ + } + else{ + pCafe = tmp; + } + + HSSFCell cellCategory = (HSSFCell) cellIter.next(); + pCategory = processCategory(myWorkBook, cellCategory); + + } + else{ + pCategory = processCategory(myWorkBook, cellTmp); + } + + + if(pCategory == null){ + continue; + } + + + + PMeal pMeal = new PMeal(); + HSSFCell cellMeal = (HSSFCell) cellIter.next(); + iCellNumber++; + + String sMeal = cellMeal.getStringCellValue(); + if(sMeal != null && !"".endsWith(sMeal)){ + + pMeal = new PMeal(); + pMeal.name_ = sMeal.toLowerCase(); + pMeal.name_rus = sMeal; + pMeal.name_eng = myWorkBook.getSheetAt(1).getRow(cellMeal.getRowIndex()).getCell(cellMeal.getColumnIndex()).getStringCellValue(); + pMeal.name_kaz = myWorkBook.getSheetAt(2).getRow(cellMeal.getRowIndex()).getCell(cellMeal.getColumnIndex()).getStringCellValue(); + + pMeal.category = pCategory; + pMeal.cafe = pCafe; + + listMeals.add(pMeal); + } + else{ + //Seems there is on meal at all + //Let's skip it + continue; + } + + HSSFCell cellDescription = (HSSFCell) cellIter.next(); + iCellNumber++; + + HSSFCell cellWeight; + HSSFCell cellPrice; + + + if(cellDescription.getColumnIndex() == 3){ + pMeal.description_rus = myWorkBook.getSheetAt(0).getRow(cellDescription.getRowIndex()).getCell(cellDescription.getColumnIndex()).getStringCellValue(); + pMeal.description_eng = myWorkBook.getSheetAt(1).getRow(cellDescription.getRowIndex()).getCell(cellDescription.getColumnIndex()).getStringCellValue(); + pMeal.description_kaz = myWorkBook.getSheetAt(2).getRow(cellDescription.getRowIndex()).getCell(cellDescription.getColumnIndex()).getStringCellValue(); + + cellWeight = (HSSFCell) cellIter.next(); + } + else{ + cellWeight = cellDescription; + } + iCellNumber++; + + + + if(cellWeight.getColumnIndex() == 4){ + pMeal.weight_rus = myWorkBook.getSheetAt(0).getRow(cellWeight.getRowIndex()).getCell(cellWeight.getColumnIndex()).getStringCellValue(); + pMeal.weight_eng = myWorkBook.getSheetAt(1).getRow(cellWeight.getRowIndex()).getCell(cellWeight.getColumnIndex()).getStringCellValue(); + pMeal.weight_kaz = myWorkBook.getSheetAt(2).getRow(cellWeight.getRowIndex()).getCell(cellWeight.getColumnIndex()).getStringCellValue(); + + cellPrice = (HSSFCell) cellIter.next(); + } + else{ + cellPrice = cellWeight; + } + iCellNumber++; + + + try{ + double dblPrice = cellPrice.getNumericCellValue(); + pMeal.price = new Double(dblPrice * 100).intValue(); + } + catch (Exception e){ + //something is wrong + //doesnot matter + } + + + if(cellIter.hasNext()){ + HSSFCell cellIngredients = (HSSFCell) cellIter.next(); + iCellNumber++; + + String sIngredientsRus = cellIngredients.getStringCellValue(); + + if(sIngredientsRus != null && !"".endsWith(sIngredientsRus)){ + String sIngredientsEng = myWorkBook.getSheetAt(1).getRow(cellIngredients.getRowIndex()).getCell(cellIngredients.getColumnIndex()).getStringCellValue(); + String sIngredientsKaz = myWorkBook.getSheetAt(2).getRow(cellIngredients.getRowIndex()).getCell(cellIngredients.getColumnIndex()).getStringCellValue(); + + String[] arrstrIngredientsRus = sIngredientsRus.split(","); + String[] arrstrIngredientsEng = sIngredientsEng.split(","); + String[] arrstrIngredientsKaz = sIngredientsKaz.split(","); + + if(arrstrIngredientsRus.length == arrstrIngredientsEng.length + && arrstrIngredientsEng.length == arrstrIngredientsKaz.length){ + + int iIngredient = 0; + for(String sIngredient : arrstrIngredientsRus){ + sIngredient = sIngredient.trim(); + PIngredient pIngredient = mapIngredients.get(sIngredient); + + if(pIngredient == null){ + pIngredient = new PIngredient(); + pIngredient.name_ = sIngredient.toLowerCase(); + pIngredient.name_rus = sIngredient; + pIngredient.name_eng = arrstrIngredientsEng[iIngredient].trim(); + pIngredient.name_kaz = arrstrIngredientsKaz[iIngredient].trim(); + mapIngredients.put(pIngredient.name_, pIngredient); + } + + pMeal.setIngrediens.add(pIngredient); + iIngredient++; + } + + } + else{ + listErrors.add("русский, английский и казахский листы НЕ совпадают по кол-ву ингредиентов в ячейке " + + (cellIngredients.getRowIndex() + 1) + ":" + (cellIngredients.getColumnIndex() + 1)); + continue; + } + } + } + } + catch(Throwable e){ + e.printStackTrace(); + throw new ImportException(iRowNumber, iCellNumber, e.toString()); + } + } + + + if(listErrors.size() > 0){ + + return listErrors; + } + + + //let's log the things + LogTableFormatter ltf = new LogTableFormatter(1, true); + ltf.addCell("RUS"); + ltf.addCell("ENG"); + ltf.addCell("KAZ"); + ltf.newSeparator(); + for(PMeal pMeal : listMeals){ + ltf.addCell(pMeal.cafe.name_rus); + ltf.addCell(pMeal.cafe.name_eng); + ltf.addCell(pMeal.cafe.name_kaz); + + ltf.addCell(pMeal.category.name_rus); + ltf.addCell(pMeal.category.name_eng); + ltf.addCell(pMeal.category.name_kaz); + + ltf.addCell(pMeal.name_rus); + ltf.addCell(pMeal.name_eng); + ltf.addCell(pMeal.name_kaz); + + ltf.addCell(pMeal.setIngrediens); + + ltf.br(); + } + + log.info(LOG + "\n" + ltf.toString()); + + + + + + for(PMeal pMeal : listMeals){ + MCafe mCafe = MongoService.ds.find(MCafe.class, + "name_." + InterfaceConstants.LANGS.RU, + pMeal.cafe.name_).get(); + if(mCafe == null){ + mCafe = new MCafe(); + mCafe.ID = MongoService.getUniqueID(MCafe.class); + mCafe.name.put(InterfaceConstants.LANGS.RU, pMeal.cafe.name_rus); + mCafe.name.put(InterfaceConstants.LANGS.EN, pMeal.cafe.name_eng); + mCafe.name.put(InterfaceConstants.LANGS.KZ, pMeal.cafe.name_kaz); + } + mCafe.deleted = false; + MongoService.save(mCafe); + + + + + MCourseCategory mCourseCategory = MongoService.ds.find(MCourseCategory.class, "name_." + InterfaceConstants.LANGS.RU, pMeal.category.name_).get(); + if(mCourseCategory == null){ + mCourseCategory = new MCourseCategory(); + mCourseCategory.ID = MongoService.getUniqueID(MCourseCategory.class); + mCourseCategory.name.put(InterfaceConstants.LANGS.RU, pMeal.category.name_rus); + mCourseCategory.name.put(InterfaceConstants.LANGS.EN, pMeal.category.name_eng); + mCourseCategory.name.put(InterfaceConstants.LANGS.KZ, pMeal.category.name_kaz); + } + mCourseCategory.deleted = false; + MongoService.save(mCourseCategory); + + + + + + MCourse mCourse = MongoService.ds.find(MCourse.class, "name_." + InterfaceConstants.LANGS.RU, pMeal.name_) + .filter(MCourse.F_CID, mCafe.ID) + .get(); + if(mCourse == null){ + mCourse = new MCourse(); + mCourse.ID = MongoService.getUniqueID(MCourse.class); + mCourse.name.put(InterfaceConstants.LANGS.RU, pMeal.name_rus); + mCourse.name.put(InterfaceConstants.LANGS.EN, pMeal.name_eng); + mCourse.name.put(InterfaceConstants.LANGS.KZ, pMeal.name_kaz); + } + + if(pMeal.description_rus == null){ + //we do not set empty descriptions + } + else{ + mCourse.description.put(InterfaceConstants.LANGS.RU, pMeal.description_rus); + } + if(pMeal.description_eng == null){ + //we do not set empty descriptions + } + else{ + mCourse.description.put(InterfaceConstants.LANGS.EN, pMeal.description_eng); + } + if(pMeal.description_kaz == null){ + //we do not set empty descriptions + } + else{ + mCourse.description.put(InterfaceConstants.LANGS.KZ, pMeal.description_kaz); + } + + mCourse.weight2.put(InterfaceConstants.LANGS.RU, pMeal.weight_rus); + mCourse.weight2.put(InterfaceConstants.LANGS.EN, pMeal.weight_eng); + mCourse.weight2.put(InterfaceConstants.LANGS.KZ, pMeal.weight_kaz); + + mCourse.CID = mCafe.ID; + mCourse.category = mCourseCategory.ID; + + + mCourse.deleted = false; + + + + //Remove them all + mCourse.ingredient.clear(); + + for(PIngredient pIngredient : pMeal.setIngrediens){ + MIngredient mIngredient = MongoService.ds.find(MIngredient.class, + "name_." + InterfaceConstants.LANGS.RU, + pIngredient.name_).get(); + + if(mIngredient == null){ + mIngredient = new MIngredient(); + mIngredient.ID = MongoService.getUniqueID(MIngredient.class); + mIngredient.name.put(InterfaceConstants.LANGS.RU, pIngredient.name_rus); + mIngredient.name.put(InterfaceConstants.LANGS.EN, pIngredient.name_eng); + mIngredient.name.put(InterfaceConstants.LANGS.KZ, pIngredient.name_kaz); + + + try{ + MongoService.save(mIngredient); + mCourse.ingredient.add(mIngredient.ID); + } + catch (Exception e){ + throw new Error(pIngredient.name_rus + ", " + pIngredient.name_eng + ", " + pIngredient.name_kaz, e); + //continue; + } + } + else{ + mIngredient.deleted = false; + MongoService.save(mIngredient); + mCourse.ingredient.add(mIngredient.ID); + } + } + + mCourse.price = pMeal.price; + mCourse.ownerID = mCafe.ownerID; + MongoService.save(mCourse); + } + + return listErrors; + } + + + + + private static PCafe processCafe(HSSFWorkbook myWorkBook, HSSFCell cellCafe){ + String sCafe = cellCafe.getStringCellValue(); + if(sCafe != null && !"".endsWith(sCafe)){ + // A new organiztion + PCafe pCafe = new PCafe(); + pCafe.name_ = sCafe.toLowerCase(); + pCafe.name_rus = sCafe; + pCafe.name_eng = myWorkBook.getSheetAt(1).getRow(cellCafe.getRowIndex()).getCell(cellCafe.getColumnIndex()).getStringCellValue(); + pCafe.name_kaz = myWorkBook.getSheetAt(2).getRow(cellCafe.getRowIndex()).getCell(cellCafe.getColumnIndex()).getStringCellValue(); + mapCafes.put(pCafe.name_, pCafe); + + return pCafe; + } + else{ + return null; + } + } + + + + private static PCategory processCategory(HSSFWorkbook myWorkBook, HSSFCell cellCategory){ + String sCategory = cellCategory.getStringCellValue(); + if(sCategory != null && !"".endsWith(sCategory)){ + PCategory pCategory = mapCategories.get(sCategory.toLowerCase()); + + if(pCategory == null){ + //A new category + pCategory = new PCategory(); + pCategory.name_ = sCategory.toLowerCase(); + pCategory.name_rus = sCategory; + pCategory.name_eng = myWorkBook.getSheetAt(1).getRow(cellCategory.getRowIndex()).getCell(cellCategory.getColumnIndex()).getStringCellValue(); + pCategory.name_kaz = myWorkBook.getSheetAt(2).getRow(cellCategory.getRowIndex()).getCell(cellCategory.getColumnIndex()).getStringCellValue(); + + mapCategories.put(pCategory.name_, pCategory); + } + + return pCategory; + } + + return null; + } +} diff --git a/kz_cafe_admin/src/kz/cafe/admin/autoimport/TabAutoImport.java b/kz_cafe_admin/src/kz/cafe/admin/autoimport/TabAutoImport.java new file mode 100644 index 0000000..a2bf1c1 --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/autoimport/TabAutoImport.java @@ -0,0 +1,179 @@ +package kz.cafe.admin.autoimport; + +import java.io.*; +import java.util.*; +import org.apache.commons.logging.*; +import kz.cafe.admin.*; +import kz.cafe.admin.panels.*; +import kz.cafe.db.*; +import com.vaadin.ui.*; +import com.vaadin.ui.Upload.FailedEvent; +import com.vaadin.ui.Upload.FinishedEvent; +import com.vaadin.ui.Upload.StartedEvent; +import com.vaadin.ui.Upload.SucceededEvent; +import com.vaadin.ui.Window.Notification; + + + +public class TabAutoImport extends AbstractPanel implements java.io.Serializable{ + private static final long serialVersionUID = -8782438197035723526L; + + + private static Log log = LogFactory.getLog(MongoService.class); + private static final String LOG = "[UI Importer] "; + + + private Upload upload; + + private File file; + + + public TabAutoImport(final AdminMain application){ + try{ + file = File.createTempFile("xls_auto_import", "xls"); + } + catch (Throwable e){ + application.getMainWindow().showNotification("ERROR", + "Не могу добавить создать временный файл " + e.toString(), + Notification.TYPE_WARNING_MESSAGE + ); + + return; + } + + + AbstractLayout panelLayout = (AbstractLayout) getContent(); + panelLayout.setMargin(false); + + upload = new Upload(null, new Uploader()); + upload.setButtonCaption("XLS файл"); + upload.setImmediate(true); + + upload.addListener(new Upload.StartedListener(){ + private static final long serialVersionUID = 5813862327410567135L; + + + + + + public void uploadStarted(StartedEvent event){ + // This method gets called immediatedly after upload is started + upload.setEnabled(false); + } + }); + + + + upload.addListener(new Upload.SucceededListener(){ + private static final long serialVersionUID = 103112353892881253L; + + + + + + public void uploadSucceeded(SucceededEvent event){ + try{ + List listErrors = Importer.importLogic(file.getAbsolutePath()); + + if(listErrors.size() > 0) { + StringBuilder sbPizda = new StringBuilder(); + + for(String sError : listErrors){ + sbPizda.append(" | "); + sbPizda.append(sError); + } + + application.getMainWindow().showNotification("ERROR", + sbPizda.toString(), + Notification.TYPE_ERROR_MESSAGE + ); + } + } + catch (Throwable e){ + log.fatal(LOG + e.toString(), e); + + application.getMainWindow().showNotification("ERROR", + "Не могу добавить объект в базу " + e.toString(), + Notification.TYPE_ERROR_MESSAGE + ); + } + } + }); + + + + + + + + upload.addListener(new Upload.FailedListener(){ + private static final long serialVersionUID = 3536909203900982601L; + + public void uploadFailed(FailedEvent event){ + // table.getApplication().getMainWindow().showNotification( + // "ERROR", + // event.getSource().toString(), + // Notification.TYPE_WARNING_MESSAGE); + + upload.setEnabled(true); + } + }); + + + + + + upload.addListener(new Upload.FinishedListener(){ + private static final long serialVersionUID = 1031302920470671299L; + + public void uploadFinished(FinishedEvent event){ + upload.setEnabled(true); + } + }); + + HorizontalLayout layH = new HorizontalLayout(); + + this.addComponent(sizeY(15)); + + layH.setSizeFull(); + layH.addComponent(upload); + layH.setComponentAlignment(upload, Alignment.MIDDLE_CENTER); + + this.addComponent(layH); + + this.addComponent(sizeY(15)); + } + + + + + + + + + + private class Uploader implements Upload.SucceededListener, Upload.FailedListener, Upload.Receiver, Upload.FinishedListener{ + private static final long serialVersionUID = 1420577175001384829L; + + + public OutputStream receiveUpload(String filename, String MIMEType){ + + FileOutputStream fileOutputStream; + try{ + fileOutputStream = new FileOutputStream(file.getAbsolutePath()); + return fileOutputStream; + } + catch (FileNotFoundException e){ + throw new Error("Не могу загрузить файл", e); + } + } + + + public void uploadFailed(FailedEvent event){ + } + public void uploadSucceeded(SucceededEvent event){ + } + public void uploadFinished(FinishedEvent event){ + } + } +} diff --git a/kz_cafe_admin/src/kz/cafe/admin/autoimport/exceptions/ImportException.java b/kz_cafe_admin/src/kz/cafe/admin/autoimport/exceptions/ImportException.java new file mode 100644 index 0000000..a2590ad --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/autoimport/exceptions/ImportException.java @@ -0,0 +1,25 @@ +package kz.cafe.admin.autoimport.exceptions; + +public class ImportException extends Exception{ + private static final long serialVersionUID = -7704748164297477266L; + + + public int row; + public int cell; + public String message; + + + + + + public ImportException(int row, int cell, String message){ + this.row = row; + this.cell = cell; + this.message = message; + } + + + public String toString(){ + return "В строке=" + row + " ячейке=" + cell + " " + message; + } +} diff --git a/kz_cafe_admin/src/kz/cafe/admin/autoimport/model/PCafe.java b/kz_cafe_admin/src/kz/cafe/admin/autoimport/model/PCafe.java new file mode 100644 index 0000000..99d7db9 --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/autoimport/model/PCafe.java @@ -0,0 +1,51 @@ +package kz.cafe.admin.autoimport.model; + +import java.util.*; + +public class PCafe{ + + public String name_; + + public String name_rus; + public String name_eng; + public String name_kaz; + + + public List meals = new ArrayList(); + + + + + + + @Override + public int hashCode(){ + final int prime = 31; + int result = 1; + result = prime * result + ((name_ == null) ? 0 : name_.hashCode()); + return result; + } + @Override + public boolean equals(Object obj){ + if(this == obj) + return true; + if(obj == null) + return false; + if(getClass() != obj.getClass()) + return false; + PCafe other = (PCafe) obj; + if(name_ == null){ + if(other.name_ != null) + return false; + } + else if(!name_.equals(other.name_)) + return false; + return true; + } + + + @Override + public String toString(){ + return "PCafe [name=" + name_ + ", meals=" + meals + "]"; + } +} diff --git a/kz_cafe_admin/src/kz/cafe/admin/autoimport/model/PCategory.java b/kz_cafe_admin/src/kz/cafe/admin/autoimport/model/PCategory.java new file mode 100644 index 0000000..c2cc4da --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/autoimport/model/PCategory.java @@ -0,0 +1,16 @@ +package kz.cafe.admin.autoimport.model; + +public class PCategory{ + + public String name_; + + public String name_rus; + public String name_eng; + public String name_kaz; + + + @Override + public String toString(){ + return "PCategory [name_=" + name_ + "]"; + } +} diff --git a/kz_cafe_admin/src/kz/cafe/admin/autoimport/model/PIngredient.java b/kz_cafe_admin/src/kz/cafe/admin/autoimport/model/PIngredient.java new file mode 100644 index 0000000..7d8add4 --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/autoimport/model/PIngredient.java @@ -0,0 +1,18 @@ +package kz.cafe.admin.autoimport.model; + +public class PIngredient{ + + public String name_; + + public String name_rus; + public String name_eng; + public String name_kaz; + + + + + @Override + public String toString(){ + return "PIngredient [name_=" + name_ + "]"; + } +} diff --git a/kz_cafe_admin/src/kz/cafe/admin/autoimport/model/PMeal.java b/kz_cafe_admin/src/kz/cafe/admin/autoimport/model/PMeal.java new file mode 100644 index 0000000..17fbac9 --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/autoimport/model/PMeal.java @@ -0,0 +1,37 @@ +package kz.cafe.admin.autoimport.model; + +import java.util.*; + +public class PMeal{ + + public String name_; + + public String name_rus; + public String name_eng; + public String name_kaz; + + + public String description_rus; + public String description_eng; + public String description_kaz; + + + public String weight_rus; + public String weight_eng; + public String weight_kaz; + + + public int price; + + public PCafe cafe; + public PCategory category; + public Set setIngrediens = new HashSet(); + + + + @Override + public String toString(){ + return "PMeal [name_=" + name_ + ", price=" + price + ", category=" + + category + ", setIngrediens=" + setIngrediens + "]"; + } +} diff --git a/kz_cafe_admin/src/kz/cafe/admin/constants/AccessConstants.java b/kz_cafe_admin/src/kz/cafe/admin/constants/AccessConstants.java new file mode 100644 index 0000000..53e0c37 --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/constants/AccessConstants.java @@ -0,0 +1,23 @@ +package kz.cafe.admin.constants; + +import java.util.*; + +public class AccessConstants{ + public enum EditMode {ADD, CHANGE, DELETE}; + + public static Set full(){ + Set set = new HashSet(); + + set.add(EditMode.ADD); + set.add(EditMode.CHANGE); + set.add(EditMode.DELETE); + + return set; + } + + + + public static Set none(){ + return Collections.emptySet(); + } +} diff --git a/kz_cafe_admin/src/kz/cafe/admin/constants/AdminConstants.java b/kz_cafe_admin/src/kz/cafe/admin/constants/AdminConstants.java new file mode 100644 index 0000000..c4bb208 --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/constants/AdminConstants.java @@ -0,0 +1,7 @@ +package kz.cafe.admin.constants; + +public class AdminConstants{ + + public static final int IMAGE_MAX_SIZE = 8 * 100 * 1024; + +} diff --git a/kz_cafe_admin/src/kz/cafe/admin/hooks/FeedbackHook.java b/kz_cafe_admin/src/kz/cafe/admin/hooks/FeedbackHook.java new file mode 100644 index 0000000..2b7ecc5 --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/hooks/FeedbackHook.java @@ -0,0 +1,12 @@ +package kz.cafe.admin.hooks; + +import kz.cafe.admin.panels.*; +import kz.cafe.db.service.*; + +public class FeedbackHook implements IHookAdd, IHookDelete, IHookEdit, IHookUndelete{ + + @Override + public void signal(DBListPanel panelList, int ID){ + MongoFeedbackService.racalculte(ID); + } +} diff --git a/kz_cafe_admin/src/kz/cafe/admin/hooks/IHookAdd.java b/kz_cafe_admin/src/kz/cafe/admin/hooks/IHookAdd.java new file mode 100644 index 0000000..7a2b81d --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/hooks/IHookAdd.java @@ -0,0 +1,8 @@ +package kz.cafe.admin.hooks; + +import kz.cafe.admin.panels.*; + +public interface IHookAdd{ + + void signal(DBListPanel panelList, int ID); +} diff --git a/kz_cafe_admin/src/kz/cafe/admin/hooks/IHookDelete.java b/kz_cafe_admin/src/kz/cafe/admin/hooks/IHookDelete.java new file mode 100644 index 0000000..2c0e56c --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/hooks/IHookDelete.java @@ -0,0 +1,9 @@ +package kz.cafe.admin.hooks; + +import kz.cafe.admin.panels.*; + +public interface IHookDelete{ + + void signal(DBListPanel panelList, int ID); + +} diff --git a/kz_cafe_admin/src/kz/cafe/admin/hooks/IHookEdit.java b/kz_cafe_admin/src/kz/cafe/admin/hooks/IHookEdit.java new file mode 100644 index 0000000..7ab4203 --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/hooks/IHookEdit.java @@ -0,0 +1,9 @@ +package kz.cafe.admin.hooks; + +import kz.cafe.admin.panels.*; + +public interface IHookEdit{ + + void signal(DBListPanel panelList, int ID); + +} diff --git a/kz_cafe_admin/src/kz/cafe/admin/hooks/IHookUndelete.java b/kz_cafe_admin/src/kz/cafe/admin/hooks/IHookUndelete.java new file mode 100644 index 0000000..677916c --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/hooks/IHookUndelete.java @@ -0,0 +1,9 @@ +package kz.cafe.admin.hooks; + +import kz.cafe.admin.panels.*; + +public interface IHookUndelete{ + + void signal(DBListPanel panelList, int ID); + +} diff --git a/kz_cafe_admin/src/kz/cafe/admin/hooks/OrderHook.java b/kz_cafe_admin/src/kz/cafe/admin/hooks/OrderHook.java new file mode 100644 index 0000000..5ab6548 --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/hooks/OrderHook.java @@ -0,0 +1,24 @@ +package kz.cafe.admin.hooks; + +import kz.cafe.admin.panels.*; +import kz.cafe.db.*; +import kz.cafe.db.model.*; +import kz.cafe.db.service.*; + +public class OrderHook implements IHookAdd, IHookDelete, IHookEdit, IHookUndelete{ + + @Override + public void signal(DBListPanel panelList, int ID){ + MOrder mOrder = MongoService.ds.find(MOrder.class, MOrder.F_ID, ID).get(); + + if(mOrder == null){ + return; + } + + + MongoOrderService.racalculteCounters(mOrder); + int iPrice = MongoOrderService.racalcultePrice(mOrder); + + panelList.table.getItem(ID).getItemProperty("Цена").setValue(DBListPanel.formatPrice(iPrice)); + } +} diff --git a/kz_cafe_admin/src/kz/cafe/admin/hooks/OrderItemHook.java b/kz_cafe_admin/src/kz/cafe/admin/hooks/OrderItemHook.java new file mode 100644 index 0000000..cb8461b --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/hooks/OrderItemHook.java @@ -0,0 +1,33 @@ +package kz.cafe.admin.hooks; + +import kz.cafe.admin.panels.*; +import kz.cafe.db.*; +import kz.cafe.db.model.*; +import kz.cafe.db.service.*; + +public class OrderItemHook implements IHookAdd, IHookDelete, IHookEdit, IHookUndelete{ + + private final DBListPanel panelOrders; + + + + public OrderItemHook(DBListPanel pnlParent){ + super(); + this.panelOrders = pnlParent; + } + + + + @Override + public void signal(DBListPanel panelList, int ID){ + MOrderItem mOrderItem = MongoService.ds.find(MOrderItem.class, MOrderItem.F_ID, ID).get(); + + int iPriceItem = MongoOrderService.racalculteOrderItemPrice(mOrderItem); + panelList.table.getItem(ID).getItemProperty("Цена").setValue(DBListPanel.formatPrice(iPriceItem)); + + + MOrder mOrder = MongoService.ds.find(MOrder.class, MOrder.F_ID, mOrderItem.OID).get(); + int iPriceOrder = MongoOrderService.racalcultePrice(mOrder); + panelOrders.table.getItem(panelOrders.table.getValue()).getItemProperty("Цена").setValue(DBListPanel.formatPrice(iPriceOrder)); + } +} diff --git a/kz_cafe_admin/src/kz/cafe/admin/notifications/Notificator.java b/kz_cafe_admin/src/kz/cafe/admin/notifications/Notificator.java new file mode 100644 index 0000000..f883b98 --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/notifications/Notificator.java @@ -0,0 +1,143 @@ +package kz.cafe.admin.notifications; + +import com.vaadin.ui.*; +import com.vaadin.ui.Button.ClickEvent; +import kz.cafe.admin.*; +import kz.cafe.admin.panels.*; +import kz.cafe.constants.*; +import kz.cafe.db.*; +import kz.cafe.db.model.*; + +public class Notificator extends Thread{ + + private AdminMain application; + + private long lNewOrdersPrev = 0; + private long lNewReservationsPrev = 0; + + + public Notificator(AdminMain application){ + this.application = application; + + } + + + @Override + public void run(){ + while(true){ + if(application.isRunning()){ + } + else{ + //Let's stop + break; + } + + if(application.UID < 0){ + //no session yet + } + else{ + long lNewOrders = MongoService.ds.find(MOrder.class) + .filter(MOrder.F_STATUS, OrderConstants.STATUS.NEW.ordinal()) + .filter(MOrder.F_DELETED, false) + .field(MOrder.F_UID).notEqual(application.UID) + //.order("-" + MOrder.F_ID) + .countAll(); + + long lNewReservations = MongoService.ds.find(MReservation.class) + .filter(MReservation.F_CONFIRMED, false) + .filter(MReservation.F_DELETED, false) + .field(MOrder.F_UID).notEqual(application.UID) + //.order("-" + MReservation.F_ID) + //.limit(1) + .countAll(); + + long lNewOrdersCalculated = 0; + long lNewReservationsCalculated = 0; + + + if(lNewOrders > lNewOrdersPrev){ + lNewOrdersCalculated = lNewOrders - lNewOrdersPrev; + } + lNewOrdersPrev = lNewOrders; + + if(lNewReservations > lNewReservationsPrev){ + lNewReservationsCalculated = lNewReservations - lNewReservationsPrev; + } + lNewReservationsPrev = lNewReservations; + + + if(lNewOrdersCalculated > 0){ + try{ + + if(application.COMPONENT instanceof DBListPanel){ + DBListPanel panel = (DBListPanel) application.COMPONENT; + + if(panel.classDB == MOrder.class || panel.classDB == MReservation.class){ + panel.reload(); + } + } + } + catch (Throwable e){ + } + } + + if(lNewOrdersCalculated > 0 || lNewReservationsCalculated > 0) { + final Window window = new Window("Оповещение"); + window.setModal(true); + window.setResizable(false); + //window.setSizeUndefined(); + //window.setHeight("20px"); + window.setWidth("500px"); + + VerticalLayout layout = (VerticalLayout) window.getContent(); + layout.setMargin(false); + layout.setSpacing(false); + + window.addComponent(AbstractPanel.sizeY(5)); + + + Label lbNewOrders = new Label(" Новых заказов: " + lNewOrdersCalculated + "      Новых мест забронировано: " + lNewReservationsCalculated); + window.addComponent(lbNewOrders); + + Button btClose = new Button("Закрыть"); + btClose.addListener(new Button.ClickListener(){ + private static final long serialVersionUID = 7530022888380402293L; + + @Override + public void buttonClick(ClickEvent event){ + application.getMainWindow().removeWindow(window); + } + }); + window.addComponent(AbstractPanel.sizeY(10)); + + HorizontalLayout layH = new HorizontalLayout(); + layH.setSizeFull(); + layH.addComponent(btClose); + layH.setComponentAlignment(btClose, Alignment.MIDDLE_CENTER); + window.addComponent(layH); + + window.addComponent(AbstractPanel.sizeY(10)); + + Label lbSound = new Label("", Label.CONTENT_XHTML); + window.addComponent(lbSound); + + window.setVisible(true); + application.getMainWindow().addWindow(window); + + //application.getMainWindow().showNotification("ПИЗДААААААААА"); + application.pusher.push(); + //System.out.println("NEW ORDDDDDDDDDDDDDDDER"); + } + } + + + + try{ + sleep(10000); + } + catch (InterruptedException e){ + break; + } + } + } +} diff --git a/kz_cafe_admin/src/kz/cafe/admin/panel_extensions/AbstractExtendedPanel.java b/kz_cafe_admin/src/kz/cafe/admin/panel_extensions/AbstractExtendedPanel.java new file mode 100644 index 0000000..fc79b9c --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/panel_extensions/AbstractExtendedPanel.java @@ -0,0 +1,9 @@ +package kz.cafe.admin.panel_extensions; + +import kz.cafe.admin.panels.*; + +public abstract class AbstractExtendedPanel extends AbstractPanel implements java.io.Serializable{ + private static final long serialVersionUID = -4753216420605439202L; + + public abstract void changeFocus(); +} diff --git a/kz_cafe_admin/src/kz/cafe/admin/panel_extensions/ExtraPanelFeedbacks.java b/kz_cafe_admin/src/kz/cafe/admin/panel_extensions/ExtraPanelFeedbacks.java new file mode 100644 index 0000000..8ce5d17 --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/panel_extensions/ExtraPanelFeedbacks.java @@ -0,0 +1,135 @@ +package kz.cafe.admin.panel_extensions; + +import java.util.*; +import kz.cafe.admin.*; +import kz.cafe.admin.AdminMain.MenuElement; +import kz.cafe.admin.constants.AccessConstants.EditMode; +import kz.cafe.admin.panels.*; +import kz.cafe.admin.panels.model.*; +import kz.cafe.db.*; +import kz.cafe.db.model.*; +import com.vaadin.ui.*; +import com.vaadin.ui.Button.ClickEvent; +import com.vaadin.ui.Button.ClickListener; + +public class ExtraPanelFeedbacks extends AbstractExtendedPanel implements java.io.Serializable{ + private static final long serialVersionUID = 711754256190346567L; + + private final Table table; + + private final Button btMenu = new Button("Отзывы"); + + + public ExtraPanelFeedbacks(final AdminMain application, final DBListPanel pnlParent){ + + AbstractLayout panelLayout = (AbstractLayout) getContent(); + panelLayout.setMargin(false); + + + + this.table = pnlParent.table; + + btMenu.addListener(new ClickListener() { + + private static final long serialVersionUID = 4542127344900596681L; + + @Override + public void buttonClick(ClickEvent event){ + + Window window = new Window("Отзывы"); + window.setModal(true); + window.center(); + + Dimension dim = Dimension.get80(table.getApplication()); + + window.setWidth(dim.iWidth + "px"); + window.setHeight(dim.iHeight + "px"); + window.setVisible(true); + + + + + + + + AdminMain app = (AdminMain) pnlParent.getApplication(); + CustomDescriptor dscr = TabFeedback.buildDescriptor(app); + + + Constraint constraint = new Constraint(); + + + int ID = (Integer) table.getValue(); + + Constraint.Criterion criterion = new Constraint.Criterion("CID", ID); + constraint.criteria.add(criterion); + +// MCafe mCafe = MongoService.get(MCafe.class, ID); +// +// criterion = new Constraint.Criterion(false, "cafe_type", mCafe.type); +// constraint.criteria.add(criterion); +// +// +// criterion = new Constraint.Criterion(false, "cafe_name", mCafe.name); +// constraint.criteria.add(criterion); + + + if(application.isAdmin){ + } + else{ + constraint.criteria.add(new Constraint.Criterion(MUser.F_OWNER_ID, application.UID)); + } + + + MenuElement menuElement = application.mapMenuClass.get(MFeedback.class); + Set setEditMode = new HashSet(); + if(application.screenAdd.contains(menuElement.ID)){ + setEditMode.add(EditMode.ADD); + } + if(application.screenDelete.contains(menuElement.ID)){ + setEditMode.add(EditMode.DELETE); + } + if(application.screenEdit.contains(menuElement.ID)){ + setEditMode.add(EditMode.CHANGE); + } + + DBListPanel panel = + new DBListPanel(app, + MFeedback.class, + dscr, + Dimension.get80(app), + setEditMode, + constraint); +// + panel.addPanel(new ExtraPanelImageUploader(panel, (CustomImageField) dscr.mapDBFields.get("image")), false); + + panel.reload(); + + AbstractLayout panelLayout = (AbstractLayout) panel.getContent(); + panelLayout.setMargin(false); + window.setContent(panel); + + pnlParent.getApplication().getMainWindow().addWindow(window); + } + }); + + btMenu.setEnabled(false); + + this.addComponent(btMenu); + } + + + + + + + @Override + public void changeFocus(){ + if(table.getValue() == null){ + btMenu.setEnabled(false); + } + else{ + btMenu.setEnabled(true); + } + } +} diff --git a/kz_cafe_admin/src/kz/cafe/admin/panel_extensions/ExtraPanelGoogleMap.java b/kz_cafe_admin/src/kz/cafe/admin/panel_extensions/ExtraPanelGoogleMap.java new file mode 100644 index 0000000..02c94a1 --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/panel_extensions/ExtraPanelGoogleMap.java @@ -0,0 +1,92 @@ +package kz.cafe.admin.panel_extensions; + +import kz.cafe.admin.panels.*; +import com.vaadin.terminal.*; +import com.vaadin.ui.*; +import com.vaadin.ui.Button.ClickEvent; + +public class ExtraPanelGoogleMap extends AbstractExtendedPanel implements java.io.Serializable{ + private static final long serialVersionUID = 711754256190346567L; + + private Table table; + private String sColumn; + private Button button = new Button("Карта"); + + + public ExtraPanelGoogleMap(DBListPanel panel, String sColumn){ + this.table = panel.table; + this.sColumn = sColumn; + + AbstractLayout panelLayout = (AbstractLayout) getContent(); + panelLayout.setMargin(false); + + button.setEnabled(false); + button.addListener(new ClickMap()); + + this.addComponent(button); + } + + + + private class ClickMap implements Button.ClickListener{ + private static final long serialVersionUID = 7787296644371759307L; + + public void buttonClick(ClickEvent event){ + + try{ + Object rowSelected = table.getValue(); + String sCoordinates = (String) table.getContainerProperty(rowSelected, sColumn).getValue(); + + String[] arrstrCoordinates = sCoordinates.split(","); + + double latitude = Double.parseDouble(arrstrCoordinates[0].trim()); + double longitude = Double.parseDouble(arrstrCoordinates[1].trim()); + + Label label = new Label("
Enlaged Map", Label.CONTENT_RAW); + Label lbCross = new Label("
+
", Label.CONTENT_RAW); + + + Window windowMap= new Window("MAP"); + windowMap.setWidth("940px"); + windowMap.setHeight("700px"); + windowMap.setClosable(true); + windowMap.setResizable(false); + + windowMap.addComponent(label); + windowMap.addComponent(lbCross); + + table.getApplication().getMainWindow().addWindow(windowMap); + } + catch (Exception e){ + button.setComponentError(new UserError("Координаты должны быть в формате: долгота,широта")); + } + +// application.getMainWindow().executeJavaScript( +// "window.open('http://maps.google.com/?ll=" + tfLatitude.getValue() + "," + tfLongitude.getValue() + "&t=h&&z=10','Map','width=1000,height=1000,toolbar=1,resizable=yes')" +// ); + } + } + + + + @Override + public void changeFocus(){ + button.setComponentError(null); + + String sValue; + try{ + sValue = "" + table.getContainerProperty(table.getValue(), sColumn).getValue(); + + if("".equals(sValue)){ + } + else{ + button.setEnabled(true); + return; + } + } + catch (Exception e){ + } + + button.setEnabled(false); + } +} diff --git a/kz_cafe_admin/src/kz/cafe/admin/panel_extensions/ExtraPanelImageUploader.java b/kz_cafe_admin/src/kz/cafe/admin/panel_extensions/ExtraPanelImageUploader.java new file mode 100644 index 0000000..2f6b845 --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/panel_extensions/ExtraPanelImageUploader.java @@ -0,0 +1,257 @@ +package kz.cafe.admin.panel_extensions; + +import java.io.*; +import kz.cafe.admin.constants.*; +import kz.cafe.admin.panels.*; +import kz.cafe.admin.panels.model.*; +import kz.cafe.constants.*; +import kz.cafe.db.*; +import kz.cafe.db.model.*; +import com.vaadin.ui.*; +import com.vaadin.ui.Upload.FailedEvent; +import com.vaadin.ui.Upload.FinishedEvent; +import com.vaadin.ui.Upload.StartedEvent; +import com.vaadin.ui.Upload.SucceededEvent; +import com.vaadin.ui.Window.Notification; +import com.vaadin.ui.themes.*; + +public class ExtraPanelImageUploader extends AbstractExtendedPanel implements java.io.Serializable{ + private static final long serialVersionUID = 711754256190346567L; + + private final DBListPanel pnlParent; + private final Table table; + private final CustomImageField cstField; + + private final Upload upload; + + private String sFileName; + + private Panel pnlImage = new Panel(); + + + public ExtraPanelImageUploader(final DBListPanel pnlParent, + final CustomImageField cstField){ + + this.pnlParent = pnlParent; + this.table = pnlParent.table; + this.cstField = cstField; + + AbstractLayout panelLayout = (AbstractLayout) getContent(); + panelLayout.setMargin(false); + + + upload = new Upload(null, new Uploader()); + upload.setButtonCaption("Изображение"); + upload.setImmediate(true); + + + upload.addListener(new Upload.StartedListener(){ + private static final long serialVersionUID = 5813862327410567135L; + + public void uploadStarted(StartedEvent event){ + // This method gets called immediatedly after upload is started + upload.setEnabled(false); + } + }); + + upload.addListener(new Upload.SucceededListener(){ + private static final long serialVersionUID = 103112353892881253L; + + public void uploadSucceeded(SucceededEvent event){ + + File file = new File(ServerConstants.getImageFolder() + sFileName); + if(file.length() > AdminConstants.IMAGE_MAX_SIZE){ + table.getApplication() + .getMainWindow() + .showNotification("ERROR", + "Размер файла превышает " + AdminConstants.IMAGE_MAX_SIZE / 1024 + " килобайт", + Notification.TYPE_WARNING_MESSAGE); + return; + } + + +// table.getItem(table.getValue()) +// .getItemProperty(ExtraPanelImage.this.field.name).setValue( +// image2ClickableLabel(sFileName, ExtraPanelImage.this.field.style.width) +// ); + + + MAbstractEditableDataElement recordToEdit = pnlParent.oldValueMongoObject; + + if(recordToEdit == null){ + recordToEdit = (MAbstractEditableDataElement) MongoService.get(pnlParent.classDB, (int) pnlParent.table.getValue()); + } + + + + try{ + java.lang.reflect.Field field = pnlParent.classDB.getField(cstField.db); + field.set(recordToEdit, sFileName); + } + catch (Throwable e){ + table.getApplication() + .getMainWindow() + .showNotification("ERROR", + "Не могу добавить объект в базу " + e.toString(), + Notification.TYPE_WARNING_MESSAGE); + } + + + MongoService.save(recordToEdit); + + + +// +// try{ +// Query q = MongoService.ds.createQuery(pnlParent.classDB).filter("ID", Long.parseLong("" + table.getValue())); +// UpdateOperations uOps = MongoService.ds.createUpdateOperations(pnlParent.classDB).set(cstField.db, sFileName); +// MongoService.ds.findAndModify(q, uOps); +// } +// catch (Throwable e){ +// table.getApplication().getMainWindow().showNotification( +// "ERROR", +// "Не могу добавить объект в базу " + e.toString(), +// Notification.TYPE_WARNING_MESSAGE); +// } + + + + + + + Object objReady; + + if(cstField.isImageInTable){ + objReady = image2ClickableLabel(sFileName, cstField.style.height); + } + else{ + objReady = sFileName; + } + table.getItem(table.getValue()) + .getItemProperty(ExtraPanelImageUploader.this.cstField.name).setValue(objReady); + + ExtraPanelImageUploader.this.pnlParent.ahoyIveChangedSomething(); + + //pnlImage.removeAllComponents(); + //pnlImage.addComponent(image2ClickableLabel(sFileName, 50)); + } + }); + + + + upload.addListener(new Upload.FailedListener(){ + private static final long serialVersionUID = 3536909203900982601L; + + public void uploadFailed(FailedEvent event){ +// table.getApplication().getMainWindow().showNotification( +// "ERROR", +// event.getSource().toString(), +// Notification.TYPE_WARNING_MESSAGE); + + upload.setEnabled(true); + } + }); + + + + upload.addListener(new Upload.FinishedListener(){ + private static final long serialVersionUID = 1031302920470671299L; + + public void uploadFinished(FinishedEvent event){ + upload.setEnabled(true); + } + }); + + + HorizontalLayout layH= new HorizontalLayout(); + + upload.setEnabled(false); + layH.addComponent(upload); + + layH.addComponent(sizeX(5)); + pnlImage.setStyleName(Runo.PANEL_LIGHT); + + layH.addComponent(pnlImage); + + this.addComponent(layH); + + } + + + + + + + + + private class Uploader implements Upload.SucceededListener, + Upload.FailedListener, + Upload.Receiver, + Upload.FinishedListener{ + + private static final long serialVersionUID = 1420577175001384829L; + + + + + + public OutputStream receiveUpload(String filename, String MIMEType){ + String sFileExtension; + + try{ + String[] arrstrFileName = filename.split("\\."); + sFileExtension = arrstrFileName[arrstrFileName.length - 1].trim(); + } + catch (Exception e1){ + table.getApplication().getMainWindow().showNotification( + "ERROR", + "Имя файла должно содержать расширение", + Notification.TYPE_WARNING_MESSAGE + ); + + throw new Error("Имя файла должно содержать расширение"); + } + + sFileName = MongoService.getUniqueID(MImage.class) + + "." + + sFileExtension; + + String sPath = ServerConstants.getImageFolder() + sFileName; + + + FileOutputStream fileOutputStream; + try{ + fileOutputStream = new FileOutputStream(sPath); + return fileOutputStream; + } + catch (FileNotFoundException e){ + throw new Error("Не могу загрузить файл", e); + } + } + + + + + + public void uploadFailed(FailedEvent event){ + } + public void uploadSucceeded(SucceededEvent event){ + } + public void uploadFinished(FinishedEvent event){ + } + } + + + + + + @Override + public void changeFocus(){ + if(table.getValue() == null){ + upload.setEnabled(false); + } + else{ + upload.setEnabled(true); + } + } +} diff --git a/kz_cafe_admin/src/kz/cafe/admin/panel_extensions/ExtraPanelImageViewer.java b/kz_cafe_admin/src/kz/cafe/admin/panel_extensions/ExtraPanelImageViewer.java new file mode 100644 index 0000000..90b765d --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/panel_extensions/ExtraPanelImageViewer.java @@ -0,0 +1,58 @@ +package kz.cafe.admin.panel_extensions; + + +import kz.cafe.admin.panels.*; +import kz.cafe.admin.panels.model.*; +import com.vaadin.ui.*; + +public class ExtraPanelImageViewer extends AbstractExtendedPanel implements java.io.Serializable{ + private static final long serialVersionUID = 711754256190346567L; + + private final Table table; + private final CustomField field; + private int height = 100; + + public ExtraPanelImageViewer(DBListPanel panel, CustomField field){ + this.table = panel.table; + this.field = field; + this.height = field.style.height; + + AbstractLayout panelLayout = (AbstractLayout) getContent(); + panelLayout.setMargin(false); + + this.setImmediate(true); + } + + + + + public ExtraPanelImageViewer(DBListPanel panel, CustomField field, int height){ + this.table = panel.table; + this.field = field; + this.height = height; + + AbstractLayout panelLayout = (AbstractLayout) getContent(); + panelLayout.setMargin(false); + + this.setImmediate(true); + } + + + + + + + @Override + public void changeFocus(){ + this.removeAllComponents(); + + + try{ + this.addComponent(image2ClickableLabel( + "" + table.getItem(table.getValue()).getItemProperty(ExtraPanelImageViewer.this.field.name), height) + ); + } + catch (Throwable e){ + } + } +} diff --git a/kz_cafe_admin/src/kz/cafe/admin/panel_extensions/ExtraPanelMany2Many.java b/kz_cafe_admin/src/kz/cafe/admin/panel_extensions/ExtraPanelMany2Many.java new file mode 100644 index 0000000..f8939e8 --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/panel_extensions/ExtraPanelMany2Many.java @@ -0,0 +1,108 @@ +package kz.cafe.admin.panel_extensions; + +import java.util.*; +import kz.cafe.admin.*; +import kz.cafe.admin.constants.*; +import kz.cafe.admin.panels.*; +import kz.cafe.db.*; +import kz.cafe.db.model.*; +import com.vaadin.ui.*; +import com.vaadin.ui.Button.ClickEvent; +import com.vaadin.ui.themes.*; + +public class ExtraPanelMany2Many extends AbstractExtendedPanel implements java.io.Serializable{ + private static final long serialVersionUID = 711754256190346567L; + + private final DBListPanel pnlParent; + private final Button btSelector; + + + public ExtraPanelMany2Many(final AdminMain application, + final String sButtonName, + final Class classSelector, + final String sField, + final Set setMode, + final DBListPanel pnlParent){ + + AbstractLayout panelLayout = (AbstractLayout) getContent(); + panelLayout.setMargin(false); + + + this.pnlParent = pnlParent; + this.btSelector = new Button(sButtonName); + this.btSelector.setEnabled(false); + + + btSelector.addListener(new Button.ClickListener(){ + private static final long serialVersionUID = -2751879007281094866L; + @SuppressWarnings("unchecked") + @Override + public void buttonClick(ClickEvent event){ + + MAbstractEditableDataElement recordToEdit = pnlParent.oldValueMongoObject; + + if(recordToEdit == null){ + //we are in RearMode + + recordToEdit = (MAbstractEditableDataElement) MongoService.get(pnlParent.classDB, (int) pnlParent.table.getValue()); + } + + Set setValue; + java.lang.reflect.Field field; + try{ + field = pnlParent.classDB.getField(sField); + setValue = (Set) field.get(recordToEdit); + } + catch (Throwable e){ + throw new Error(e); + } + + + Window window = new Window(sButtonName); + + DBListSelectorMultiPanel pnlSelector = new DBListSelectorMultiPanel(application, + application.mapMenuClass.get(classSelector).abstractTab, + window, + recordToEdit, + field); + + //Let's mark the things to highlight + pnlSelector.panel.setSelectedIDes.addAll(setValue); + + //Reload + pnlSelector.panel.reload(); + + + + pnlSelector.setStyleName(Runo.PANEL_LIGHT); + + + window.setContent(pnlSelector); + window.setSizeUndefined(); + window.setModal(true); + window.center(); + + window.setWidth(Dimension.get80(application).iWidth + "px"); + + + application.getMainWindow().addWindow(window); + } + }); + + this.addComponent(btSelector); + } + + + + + + @Override + public void changeFocus(){ + if(pnlParent.table.getValue() == null){ + btSelector.setEnabled(false); + } + else{ + btSelector.setEnabled(true); + } + } +} diff --git a/kz_cafe_admin/src/kz/cafe/admin/panel_extensions/ExtraPanelMenu.java b/kz_cafe_admin/src/kz/cafe/admin/panel_extensions/ExtraPanelMenu.java new file mode 100644 index 0000000..3205ba0 --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/panel_extensions/ExtraPanelMenu.java @@ -0,0 +1,121 @@ +package kz.cafe.admin.panel_extensions; + +import kz.cafe.admin.*; +import kz.cafe.admin.constants.*; +import kz.cafe.admin.panels.*; +import kz.cafe.admin.panels.model.*; +import kz.cafe.db.*; +import kz.cafe.db.model.*; +import com.vaadin.ui.*; +import com.vaadin.ui.Button.ClickEvent; +import com.vaadin.ui.Button.ClickListener; +import com.vaadin.ui.themes.*; + +public class ExtraPanelMenu extends AbstractExtendedPanel implements java.io.Serializable{ + private static final long serialVersionUID = 711754256190346567L; + + private final Table table; + + private final Button btMenu = new Button("Меню"); + + + public ExtraPanelMenu(final AdminMain application, final DBListPanel pnlParent){ + + AbstractLayout panelLayout = (AbstractLayout) getContent(); + panelLayout.setMargin(false); + + + + this.table = pnlParent.table; + + btMenu.addListener(new ClickListener() { + + private static final long serialVersionUID = 4542127344900596681L; + + @Override + public void buttonClick(ClickEvent event){ + + Window window = new Window("Меню"); + window.setModal(true); + window.center(); + + Dimension dim = Dimension.get80(table.getApplication()); + + window.setSizeUndefined(); + window.setVisible(true); + window.setWidth(dim.iWidth + "px"); + + + + + + CustomDescriptor dscr = TabCourse.buildSelector(); + + + AdminMain app = (AdminMain) pnlParent.getApplication(); + + + Constraint constraint = new Constraint(); + + + int ID = (Integer) table.getValue(); + + Constraint.Criterion criterion = new Constraint.Criterion("CID", ID); + constraint.criteria.add(criterion); + + if(application.isAdmin){ + } + else{ + constraint.criteria.add(new Constraint.Criterion(MUser.F_OWNER_ID, application.UID)); + } + + + DBListPanel panelCourse = new DBListPanel(app, + MCourse.class, + dscr, + Dimension.get80(app), + AccessConstants.full(), + constraint); + + panelCourse.reload(); + + panelCourse.addPanel(new ExtraPanelImageUploader(panelCourse, (CustomImageField) dscr.mapDBFields.get("image")), false); + + panelCourse.addPanel(new ExtraPanelMany2Many(application, + "Ингредиенты ...", + MIngredient.class, + "ingredient", + AccessConstants.none(), + panelCourse), false); + + + AbstractLayout panelLayout = (AbstractLayout) panelCourse.getContent(); + panelLayout.setMargin(false); + + panelCourse.setStyleName(Runo.PANEL_LIGHT); + + window.setContent(panelCourse); + pnlParent.getApplication().getMainWindow().addWindow(window); + } + }); + + btMenu.setEnabled(false); + + this.addComponent(btMenu); + } + + + + + + + @Override + public void changeFocus(){ + if(table.getValue() == null){ + btMenu.setEnabled(false); + } + else{ + btMenu.setEnabled(true); + } + } +} diff --git a/kz_cafe_admin/src/kz/cafe/admin/panel_extensions/ExtraPanelOneToMany.java b/kz_cafe_admin/src/kz/cafe/admin/panel_extensions/ExtraPanelOneToMany.java new file mode 100644 index 0000000..1482468 --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/panel_extensions/ExtraPanelOneToMany.java @@ -0,0 +1,120 @@ +package kz.cafe.admin.panel_extensions; + +import kz.cafe.admin.*; +import kz.cafe.admin.panels.*; +import kz.cafe.db.*; +import com.vaadin.ui.*; +import com.vaadin.ui.Button.ClickEvent; +import com.vaadin.ui.Button.ClickListener; + +public class ExtraPanelOneToMany extends AbstractExtendedPanel implements java.io.Serializable{ + private static final long serialVersionUID = 711754256190346567L; + + private final Table table; + + private final Button btMenu = new Button("Отзывы"); + + + public ExtraPanelOneToMany(final AdminMain application, + final DBListPanel pnlParent, + final Class classRelatedTo, + final Constraint constraint){ + + AbstractLayout panelLayout = (AbstractLayout) getContent(); + panelLayout.setMargin(false); + + + + this.table = pnlParent.table; + + btMenu.addListener(new ClickListener() { + + private static final long serialVersionUID = 4542127344900596681L; + + @Override + public void buttonClick(ClickEvent event){ + + Window window = new Window("Отзывы"); + window.setModal(true); + window.center(); + + Dimension dim = Dimension.get80(table.getApplication()); + + window.setWidth(dim.iWidth + "px"); + window.setHeight(dim.iHeight + "px"); + window.setVisible(true); + + + + + + + + AdminMain app = (AdminMain) pnlParent.getApplication(); + //CustomDescriptor dscr = TabFeedback.buildDescriptor(app); + + + Constraint constraint = new Constraint(); + + + int ID = (Integer) table.getValue(); + +// Constraint.Criterion criterion = new Constraint.Criterion(true, "CID", ID); +// constraint.criteria.add(criterion); +// +// MCafe mCafe = MongoService.get(MCafe.class, ID); +// +// criterion = new Constraint.Criterion(false, "cafe_type", mCafe.type); +// constraint.criteria.add(criterion); +// +// +// criterion = new Constraint.Criterion(false, "cafe_name", mCafe.name); +// constraint.criteria.add(criterion); +// +// +// if(application.isAdmin){ +// } +// else{ +// constraint.criteria.add(new Constraint.Criterion(true, MUser.F_OWNER_ID, application.UID)); +// } +// +// +// +// DBListPanel panel = +// new DBListPanel(app, +// classRelatedTo, +// dscr, +// Dimension.get80(app), +// ViewConstants.EditMode.FULL, +// constraint); +//// +// panel.addPanel(new ExtraPanelImageUploader(panel, (CustomImageField) dscr.mapDBFields.get("image")), false); +// +// AbstractLayout panelLayout = (AbstractLayout) panel.getContent(); +// panelLayout.setMargin(false); +// window.setContent(panel); +// +// pnlParent.getApplication().getMainWindow().addWindow(window); + } + }); + + btMenu.setEnabled(false); + + this.addComponent(btMenu); + } + + + + + + + @Override + public void changeFocus(){ + if(table.getValue() == null){ + btMenu.setEnabled(false); + } + else{ + btMenu.setEnabled(true); + } + } +} diff --git a/kz_cafe_admin/src/kz/cafe/admin/panel_extensions/ExtraPanelOrderItems.java b/kz_cafe_admin/src/kz/cafe/admin/panel_extensions/ExtraPanelOrderItems.java new file mode 100644 index 0000000..22b0ca5 --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/panel_extensions/ExtraPanelOrderItems.java @@ -0,0 +1,137 @@ +package kz.cafe.admin.panel_extensions; + +import kz.cafe.admin.*; +import kz.cafe.admin.constants.*; +import kz.cafe.admin.hooks.*; +import kz.cafe.admin.panels.*; +import kz.cafe.admin.panels.model.*; +import kz.cafe.db.*; +import kz.cafe.db.model.*; +import com.vaadin.ui.*; +import com.vaadin.ui.Button.ClickEvent; +import com.vaadin.ui.Button.ClickListener; +import com.vaadin.ui.themes.*; + +public class ExtraPanelOrderItems extends AbstractExtendedPanel implements java.io.Serializable{ + private static final long serialVersionUID = 711754256190346567L; + + private final Table table; + + private final Button btMenu = new Button("Состав заказа"); + + + public ExtraPanelOrderItems(final AdminMain application, final DBListPanel pnlParent){ + + AbstractLayout panelLayout = (AbstractLayout) getContent(); + panelLayout.setMargin(false); + + + + this.table = pnlParent.table; + + btMenu.addListener(new ClickListener() { + + private static final long serialVersionUID = 4542127344900596681L; + + @Override + public void buttonClick(ClickEvent event){ + + Window window = new Window("Состав Заказа"); + window.setModal(true); + window.center(); + + Dimension dim = Dimension.get80(table.getApplication()); + + window.setSizeUndefined(); + window.setVisible(true); + window.setWidth(dim.iWidth + "px"); + + + + + + CustomDescriptor dscr = TabOrderItems.buildSelector(); + + + AdminMain app = (AdminMain) pnlParent.getApplication(); + + + Constraint constraint = new Constraint(); + + + int ID = (Integer) table.getValue(); + + Constraint.Criterion criterion = new Constraint.Criterion("OID", ID); + constraint.criteria.add(criterion); + +// MCafe mCafe = MongoService.get(MCafe.class, ID); +// +// criterion = new Constraint.Criterion(false, "cafe_type", MongoService.get(MCafeType.class, mCafe.type).name); +// constraint.criteria.add(criterion); +// +// +// criterion = new Constraint.Criterion(false, "cafe_name", mCafe.name); +// constraint.criteria.add(criterion); + +// if(application.isAdmin){ +// } +// else{ +// constraint.criteria.add(new Constraint.Criterion(true, MUser.F_OWNER_ID, application.UID)); +// } + + + DBListPanel panelOrderItems = new DBListPanel(app, + MOrderItem.class, + dscr, + Dimension.get50(app), + AccessConstants.full(), + constraint); + + panelOrderItems.hookAdd(new OrderItemHook(pnlParent)); + panelOrderItems.hookDelete(new OrderItemHook(pnlParent)); + panelOrderItems.hookEdit(new OrderItemHook(pnlParent)); + panelOrderItems.hookUndelete(new OrderItemHook(pnlParent)); + + + panelOrderItems.reload(); + +// panelCourse.addPanel(new ExtraPanelImageUploader(panelCourse, (CustomImageField) dscr.mapDBFields.get("image")), false); + +// panelCourse.addPanel(new ExtraPanelMany2Many(application, +// "Ингредиенты ...", +// MIngredient.class, +// "ingredient", +// ViewConstants.none(), +// panelCourse), false); + + + AbstractLayout panelLayout = (AbstractLayout) panelOrderItems.getContent(); + panelLayout.setMargin(false); + + panelOrderItems.setStyleName(Runo.PANEL_LIGHT); + + window.setContent(panelOrderItems); + pnlParent.getApplication().getMainWindow().addWindow(window); + } + }); + + btMenu.setEnabled(false); + + this.addComponent(btMenu); + } + + + + + + + @Override + public void changeFocus(){ + if(table.getValue() == null){ + btMenu.setEnabled(false); + } + else{ + btMenu.setEnabled(true); + } + } +} diff --git a/kz_cafe_admin/src/kz/cafe/admin/panel_extensions/ExtraPanelPublishAll.java b/kz_cafe_admin/src/kz/cafe/admin/panel_extensions/ExtraPanelPublishAll.java new file mode 100644 index 0000000..2abf061 --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/panel_extensions/ExtraPanelPublishAll.java @@ -0,0 +1,63 @@ +package kz.cafe.admin.panel_extensions; + +import kz.cafe.admin.panels.*; +import kz.cafe.admin.panels.model.*; +import kz.cafe.db.*; +import kz.cafe.db.model.*; +import com.google.code.morphia.query.*; +import com.vaadin.ui.*; +import com.vaadin.ui.Button.ClickEvent; +import com.vaadin.ui.themes.*; + +public class ExtraPanelPublishAll extends AbstractExtendedPanel implements java.io.Serializable{ + private static final long serialVersionUID = -8422307356783911085L; + + + public ExtraPanelPublishAll(final DBListPanel pnlParent){ + AbstractLayout panelLayout = (AbstractLayout) this.getContent(); + panelLayout.setMargin(false); + + this.setStyleName(Runo.PANEL_LIGHT); + + + + Button btPublishAll = new Button("Публ. все"); + btPublishAll.addListener(new Button.ClickListener() { + private static final long serialVersionUID = -7828505809924280224L; + + @SuppressWarnings({ "unchecked", "rawtypes" }) + @Override + public void buttonClick(ClickEvent event){ + CustomField customField = pnlParent.descriptor.mapDBFields.get(MAbstractEditableDataElement.F_PUBLISHED); + + if(customField == null){ + } + else{ + for(Object id : pnlParent.table.getItemIds()){ + pnlParent.table.getItem(id).getItemProperty(customField.name).setValue(true); + + Query q = MongoService.ds.createQuery(pnlParent.classDB).filter(MAbstractEditableDataElement.F_ID, id); + + UpdateOperations uOps = + MongoService.ds.createUpdateOperations(pnlParent.classDB) + .set(MAbstractEditableDataElement.F_PUBLISHED, true) + .set(MAbstractEditableDataElement.F_UPDATED, System.currentTimeMillis()); + + try{ + MongoService.ds.findAndModify(q, uOps); + } + catch (Exception e){ + } + } + } + } + }); + + this.addComponent(btPublishAll); + } + + + @Override + public void changeFocus(){ + } +} diff --git a/kz_cafe_admin/src/kz/cafe/admin/panel_extensions/ExtraPanelUnPublishAll.java b/kz_cafe_admin/src/kz/cafe/admin/panel_extensions/ExtraPanelUnPublishAll.java new file mode 100644 index 0000000..bb3cbb2 --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/panel_extensions/ExtraPanelUnPublishAll.java @@ -0,0 +1,63 @@ +package kz.cafe.admin.panel_extensions; + +import kz.cafe.admin.panels.*; +import kz.cafe.admin.panels.model.*; +import kz.cafe.db.*; +import kz.cafe.db.model.*; +import com.google.code.morphia.query.*; +import com.vaadin.ui.*; +import com.vaadin.ui.Button.ClickEvent; +import com.vaadin.ui.themes.*; + +public class ExtraPanelUnPublishAll extends AbstractExtendedPanel implements java.io.Serializable{ + private static final long serialVersionUID = -8422307356783911085L; + + + public ExtraPanelUnPublishAll(final DBListPanel pnlParent){ + AbstractLayout panelLayout = (AbstractLayout) this.getContent(); + panelLayout.setMargin(false); + + this.setStyleName(Runo.PANEL_LIGHT); + + + + Button btPublishAll = new Button("Снять с публ."); + btPublishAll.addListener(new Button.ClickListener() { + private static final long serialVersionUID = -7828505809924280224L; + + @SuppressWarnings({ "unchecked", "rawtypes" }) + @Override + public void buttonClick(ClickEvent event){ + CustomField customField = pnlParent.descriptor.mapDBFields.get(MAbstractEditableDataElement.F_PUBLISHED); + + if(customField == null){ + } + else{ + for(Object id : pnlParent.table.getItemIds()){ + pnlParent.table.getItem(id).getItemProperty(customField.name).setValue(false); + + Query q = MongoService.ds.createQuery(pnlParent.classDB).filter(MAbstractEditableDataElement.F_ID, id); + + UpdateOperations uOps = + MongoService.ds.createUpdateOperations(pnlParent.classDB) + .set(MAbstractEditableDataElement.F_PUBLISHED, false) + .set(MAbstractEditableDataElement.F_UPDATED, System.currentTimeMillis()); + + try{ + MongoService.ds.findAndModify(q, uOps); + } + catch (Exception e){ + } + } + } + } + }); + + this.addComponent(btPublishAll); + } + + + @Override + public void changeFocus(){ + } +} diff --git a/kz_cafe_admin/src/kz/cafe/admin/panels/AbstractDBPanel.java b/kz_cafe_admin/src/kz/cafe/admin/panels/AbstractDBPanel.java new file mode 100644 index 0000000..fdd78d3 --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/panels/AbstractDBPanel.java @@ -0,0 +1,130 @@ +package kz.cafe.admin.panels; + +import org.apache.commons.logging.*; +import kz.cafe.admin.*; +import kz.cafe.admin.panels.model.*; +import kz.cafe.constants.*; +import kz.cafe.db.*; +import kz.cafe.db.model.*; +import com.vaadin.ui.*; + +public class AbstractDBPanel extends AbstractPanel{ + private static final long serialVersionUID = 4693209044763912578L; + + + private static Log log = LogFactory.getLog(MongoService.class); + private static final String LOG = "[UI PNL] "; + + + public volatile String MENU_TITLE; + + + public Class classDB; + + + + public NativeSelect CURRENT_LANG; + + + + + + public AbstractDBPanel(){ + // Langs + CURRENT_LANG = new NativeSelect(); + for(InterfaceConstants.LANGS lang : InterfaceConstants.LANGS.values()){ + CURRENT_LANG.addItem(lang); + } + CURRENT_LANG.setNullSelectionAllowed(false); + CURRENT_LANG.setWidth("50px"); + + CURRENT_LANG.select(CURRENT_LANG.getItemIds().iterator().next()); + + CURRENT_LANG.setImmediate(true); + } + + + + + protected java.lang.reflect.Field getField(String sName){ + java.lang.reflect.Field field; + try{ + field = classDB.getField(sName); + } + catch (Throwable e){ + throw new Error("Field access name=" + sName + " failed.", e); + } + + return field; + } + + + + protected Object getFieldValue(java.lang.reflect.Field field, Object obj) { + try{ + return field.get(obj); + } + catch (Exception e){ + throw new Error("Field access value=" + field + " failed.", e); + } + } + + + + @SuppressWarnings({ "rawtypes"}) + public void localizeCombos(AbstractComboField cdf, Class classForeign){ + log.trace(LOG + "Loading combo " + classForeign.getName()); + + InterfaceConstants.LANGS lang = InterfaceConstants.LANGS.valueOf("" + CURRENT_LANG.getValue()); + + if(cdf.lang == null || cdf.lang != lang || cdf.getElements().size() == 0) { + cdf.clear(); + + for(Object obj : Caching.getList(classForeign)){ + MAbstractDataElement mde = (MAbstractDataElement) obj; + + String sLocalizedText = mde.humanReadable(lang); + cdf.add(new CustomFixedComboField.Element(mde.ID, sLocalizedText)); + } + + cdf.lang = lang; + } + + log.trace(LOG + "gadina"); + } + + + + + @SuppressWarnings({ "rawtypes", "unchecked"}) + public void localizeCombos(CustomDatabaseComboField cdf, Class classForeign){ +// log.trace(LOG + "suka"); + + InterfaceConstants.LANGS lang = InterfaceConstants.LANGS.valueOf("" + CURRENT_LANG.getValue()); + + if(cdf.lang == null || cdf.lang != CURRENT_LANG.getValue() || cdf.getElements().size() == 0) { + cdf.clear(); + + for(Object obj : MongoService.getList(classForeign, cdf.constraint)){ + MAbstractDataElement mde = (MAbstractDataElement) obj; + + String sLocalizedText = mde.humanReadable(lang); + cdf.add(new CustomFixedComboField.Element(mde.ID, sLocalizedText)); + } + + cdf.lang = lang; + } + +// log.trace(LOG + "gadina"); + } + + + + + public static Object formatPrice(int iPrice){ + return new Float(iPrice) / 100; + } + public static Object formatPrice(Object price){ + return Float.parseFloat("" + price) / 100; + } +} diff --git a/kz_cafe_admin/src/kz/cafe/admin/panels/AbstractPanel.java b/kz_cafe_admin/src/kz/cafe/admin/panels/AbstractPanel.java new file mode 100644 index 0000000..2db0d71 --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/panels/AbstractPanel.java @@ -0,0 +1,47 @@ +package kz.cafe.admin.panels; + +import kz.cafe.constants.*; +import com.vaadin.ui.*; + +public class AbstractPanel extends Panel implements java.io.Serializable{ + private static final long serialVersionUID = 8694959109084291035L; + + + + public static Label sizeY(int iSize){ + return sizeY(iSize, null); + } + + + public static Label sizeY(int iSize, String sStyleName){ + Label szY = new Label(" ", Label.CONTENT_XHTML); + szY.setHeight(iSize + "px"); + + if(sStyleName == null){ + } + else{ + szY.setStyleName(sStyleName); + } + + return szY; + } + + + + + + public Label sizeX(int iSize){ + Label szX = new Label(" ", Label.CONTENT_XHTML); + szX.setWidth(iSize + "px"); + return szX; + } + + + protected Label image2ClickableLabel(String sFileName, int iHeight){ + return new Label(image2ClickableText(sFileName, iHeight), Label.CONTENT_XHTML); + } + protected String image2ClickableText(String sFileName, int iHeight){ + return ""; + } + +} diff --git a/kz_cafe_admin/src/kz/cafe/admin/panels/DBListPanel.java b/kz_cafe_admin/src/kz/cafe/admin/panels/DBListPanel.java new file mode 100644 index 0000000..a39ca58 --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/panels/DBListPanel.java @@ -0,0 +1,3010 @@ +package kz.cafe.admin.panels; + +import java.text.*; +import java.util.*; +import java.util.regex.*; +import kz.cafe.admin.*; +import kz.cafe.admin.constants.*; +import kz.cafe.admin.constants.AccessConstants.EditMode; +import kz.cafe.admin.hooks.*; +import kz.cafe.admin.panel_extensions.*; +import kz.cafe.admin.panels.components.*; +import kz.cafe.admin.panels.model.*; +import kz.cafe.constants.*; +import kz.cafe.db.*; +import kz.cafe.db.model.*; +import kz.cafe.db.model.anotations.*; +import kz.cafe.logs.*; +import org.apache.commons.logging.*; +import com.google.code.morphia.query.*; +import com.mongodb.*; +import com.vaadin.data.*; +import com.vaadin.data.Property.ValueChangeEvent; +import com.vaadin.data.Property.ValueChangeListener; +import com.vaadin.event.*; +import com.vaadin.terminal.*; +import com.vaadin.ui.*; +import com.vaadin.ui.Button.ClickEvent; +import com.vaadin.ui.Button.ClickListener; +import com.vaadin.ui.Table.ColumnGenerator; +import com.vaadin.ui.Table.HeaderClickEvent; +import com.vaadin.ui.Window.Notification; +import com.vaadin.ui.themes.*; + + + +public class DBListPanel extends AbstractDBPanel implements java.io.Serializable{ + private static Log log = LogFactory.getLog(MongoService.class); + private static final String LOG = "[UI] "; + + + + + + + + private static final long serialVersionUID = 1887604984628963165L; + + + private volatile boolean NOT_INITED_YET = true; + + private static final String BT_RELOAD = "Обновить"; + private static final String BT_ADD = "Добавить"; + private static final String BT_EDIT = "Редактировать"; + private static final String BT_SAVE = "Сохранить"; + private static final String BT_CANCEL = "Отменить"; + private static final String BT_DELETE = "Удалить"; + + private static final String CB_DELETED = "Показывать удаленные"; + private static final String BT_UNDELETE = "Восстановить"; + + private static final int SEARCH_PADDING = 50; + private static final String SEARCH_HEIGHT = "30px"; + + + private final AdminMain application; + + + public final CustomDescriptor descriptor; + + public final Set setSelectedIDes = new HashSet(); + + + private Button btReload = new Button(BT_RELOAD); + + + protected Button btFirst = new Button("<<"); + protected Button btPrev = new Button("<"); + protected TextField tfPage = new TextField(); + protected TextField tfTotal = new TextField(); + protected Button btGo = new Button(); + protected Button btNext = new Button(">"); + protected Button btLast = new Button(">>"); + + + private Button btAdd = new Button(BT_ADD); + private Button btEdit = new Button(BT_EDIT); + private Button btSave = new Button(BT_SAVE); + private Button btCancel = new Button(BT_CANCEL); + private Button btDelete = new Button(BT_DELETE); + private CheckBox cbShowDeleted = new CheckBox(CB_DELETED); + private Button btUnDelete = new Button(BT_UNDELETE); + + private boolean isEditMode = false; + + public Object itemId; + public String sItemId; + + + + private Map mapFilterText = new HashMap(); + private Map mapFilterLocalizedText = new HashMap(); + private Map mapFilterBooleanTrueOnly = new HashMap(); + private Map mapFilterInteger = new HashMap(); + private Map mapFilterIntegerSign = new HashMap(); + private Map mapFilterDateFrom = new HashMap(); + private Map mapFilterDateTo = new HashMap(); + private Map mapFilterSelect = new HashMap(); + + + + private Map mapVirtualFields = new HashMap(); + + + public Table table; + private Order order; + + + + private HorizontalLayout panelTopAddons = new HorizontalLayout(); + private HorizontalLayout panelBottomAddons = new HorizontalLayout(); + private List listExtraPanels = new ArrayList(); + + + private final Constraint constraint; + + + private final Dimension dim; + private final Set setMode; + public final Set setBlockedRecords; + + + + public MAbstractEditableDataElement oldValueMongoObject = null; + private Map mapOldValuesInTable = new HashMap(); + + + private List listHookAdds = new ArrayList(); + private List listHookEdits = new ArrayList(); + private List listHookDeletes = new ArrayList(); + private List listHookUnDeletes = new ArrayList(); + + + + + int iCurrentPage; + int iMaxPages; + private final int PAGE_SIZE = 50; + + + // Here we keep the edit mode UI elements + private final Map mapEditModeComponents = new HashMap(); + + + private TableFieldFactory factory = new TableFieldFactory(){ + private static final long serialVersionUID = -4593144203144832507L; + + @SuppressWarnings({ "rawtypes" }) + public Field createField(Container container, + Object rowInProgressID, + Object propertyId, + Component uiContext){ + + //Let's go in for Virtual fields first + CustomField cstField = mapVirtualFields.get(propertyId.toString()); + if(cstField != null){ + if(isEditMode){ + if(itemId == rowInProgressID){ + if(cstField.isEditable) { + return new CheckBox(); + } + } + } + + return null; + } + + + cstField = descriptor.mapNames.get(propertyId.toString()); + java.lang.reflect.Field field = getField(cstField.db); + + String sField = field.toString().toLowerCase(); + + if(isEditMode && cstField.isEditable){ + if(("" + itemId).equals("" + rowInProgressID)){ + if(cstField instanceof FCustomController){ + CheckBox cbController = new CheckBox(); + cbController.setImmediate(true); + cbController.addListener(new LController((FCustomController) cstField)); + mapEditModeComponents.put(cstField.name, cbController); + return cbController; + } + else if(sField.contains("bool")){ + CheckBox cb = new CheckBox(); + mapEditModeComponents.put(cstField.name, cb); + return cb; + } + else if(field.isAnnotationPresent(AnnotationDate.class) ){ + CustomDateField cdf = (CustomDateField) cstField; + + DateField df = new DateField(); + df.setWidth(cstField.style.width + "px"); + df.setDateFormat(cdf.format); + + mapEditModeComponents.put(cstField.name, df); + return df; + } + else if(field.isAnnotationPresent(AnnotationTime.class) ){ + TextField tf = new TextField(); + //tf.setWidth(cstField.style.width + "px"); + + tf.setWidth("42px"); + tf.setHeight("24px"); + tf.setMaxLength(5); + tf.setStyleName("no-textarea-resize"); + + mapEditModeComponents.put(cstField.name, tf); + return tf; + } + else if(field.isAnnotationPresent(AnnotationPrice.class) ){ + TextField tf = new TextField(); + tf.setWidth(cstField.style.width + "px"); + + //tf.setWidth("42px"); + tf.setHeight("24px"); + tf.setStyleName("no-textarea-resize"); + + mapEditModeComponents.put(cstField.name, tf); + return tf; + } + + + + else if(cstField instanceof CustomFixedComboField){ + // TODO + + CustomFixedComboField cdf = (CustomFixedComboField) cstField; + + + Select select = new Select(); + + if(field.isAnnotationPresent(AnnotationRelated.class) ){ + Class classForeign = + field.getAnnotation(AnnotationRelated.class).foreign(); + + localizeCombos(cdf, classForeign); + } + + for(CustomFixedComboField.Element elem : cdf.getElements()){ + select.addItem(elem.text); + } + + + select.setNullSelectionAllowed(!cdf.isMust); + + select.setWidth(cstField.style.width + "px"); + select.setHeight("24px"); + + mapEditModeComponents.put(cstField.name, select); + return select; + } + + + + else if(cstField instanceof CustomDatabaseComboField){ + // TODO + + CustomDatabaseComboField cdf = (CustomDatabaseComboField) cstField; + + + Select select = new Select(); + + if(field.isAnnotationPresent(AnnotationRelated.class) ){ + Class classForeign = + field.getAnnotation(AnnotationRelated.class).foreign(); + + localizeCombos(cdf, classForeign); + } + + for(CustomFixedComboField.Element elem : cdf.getElements()){ + select.addItem(elem.text); + } + + + select.setNullSelectionAllowed(!cdf.isMust); + + select.setWidth(cstField.style.width + "px"); + select.setHeight("24px"); + + mapEditModeComponents.put(cstField.name, select); + return select; + } + + + + + else if(cstField instanceof CustomMultiCombo){ + CustomMultiCombo cdf = (CustomMultiCombo) cstField; + + switch (cdf.type){ + case COMBO:{ + Select select = new Select(); + select.setNullSelectionAllowed(!cdf.isMust); + select.setMultiSelect(true); + + select.setWidth(cstField.style.width + "px"); + select.setHeight(cstField.style.height + "px"); + + + Class classForeign = field.getAnnotation(AnnotationIncusiveList.class).foreign(); + + localizeCombos(cdf, classForeign); + + + + for(CustomFixedComboField.Element elem : cdf.getElements()){ + select.addItem(elem.text); + select.select(elem.text); + } + + + + +// Object objValue = table.getItem(itemId).getItemProperty(cstField.name); +// String sAllInLine = "" + objValue; +// +// String[] arrstrValues = sAllInLine.split(","); +// +// for(String sValue : arrstrValues){ +// select.select(sValue); +// } + + mapEditModeComponents.put(cstField.name, select); + return select; + } + } + } + + + + + + else if(field.isAnnotationPresent(AnnotationImage.class) ){ + + //We do not edit image in table + return null; + } + else{ + TextField tf = new TextField(); + tf.setHeight("24px"); + tf.setWidth("100%"); + + if(cstField.style.height > 0) { + tf.setHeight(cstField.style.height + "px"); + } + + if(cstField.style.expandable) { + } + else{ + tf.setStyleName("no-textarea-resize"); + } + + mapEditModeComponents.put(cstField.name, tf); + return tf; + } + } + + //Let's check the controllers + for(CustomField cstFieldController : descriptor.listFields){ + if(cstFieldController instanceof FCustomController){ + FCustomController fController = (FCustomController) cstFieldController; + + boolean bController = Boolean.parseBoolean("" + table.getItem(table.getValue()).getItemProperty(cstFieldController.name).getValue()); + + for(String sTableFieldName : fController.listFields){ + AbstractComponent abstractComponent = mapEditModeComponents.get(sTableFieldName); + + if(abstractComponent == null) { + //not loaded yet, will be process by Vaadin later + } + else{ + abstractComponent.setEnabled(bController); + } + } + } + } + } + else{ + // It's RO mode + //System.out.println(cstField); + + try{ + if(field.isAnnotationPresent(AnnotationRelated.class)){ + AnnotationRelated annotationRelated = field.getAnnotation(AnnotationRelated.class); + + //String sRelatedFieldName = descriptor.mapDBFields.get(field.getName()).name; + + int ID; + + if(cstField instanceof CustomRelationField){ + CustomRelationField crf = (CustomRelationField) cstField; + ID = Integer.parseInt("" + table.getItem(rowInProgressID).getItemProperty(crf.relationField)); + } + else if(cstField instanceof CustomFixedComboField){ + CustomFixedComboField ccf = (CustomFixedComboField) cstField; + ID = ccf.get("" + table.getItem(rowInProgressID).getItemProperty(propertyId)).id; + } + else if(cstField instanceof CustomDatabaseComboField){ + CustomDatabaseComboField ccf = (CustomDatabaseComboField) cstField; + ID = ccf.get("" + table.getItem(rowInProgressID).getItemProperty(propertyId)).id; + } + else{ + return null; + } + + + //int ID = Integer.parseInt("" + table.getItem(rowInProgressID).getItemProperty(sRelatedFieldName)); + + RelationButton bt = new RelationButton(application, + ID, + application.mapMenuClass.get(annotationRelated.foreign()).abstractTab, + application.mapMenuClass.get(annotationRelated.foreign()).name); + bt.addStyleName(BaseTheme.BUTTON_LINK); + return bt; + } + else if(cstField instanceof CustomRelationFieldFlexable){ + CustomRelationFieldFlexable cdf = (CustomRelationFieldFlexable) cstField; + + int ID = Integer.parseInt("" + table.getItem(rowInProgressID).getItemProperty(cdf.relationField)); + Class classEntity = Class.forName("" + table.getItem(rowInProgressID).getItemProperty(cdf.sRelatedClassField)); + + RelationButton bt = new RelationButton(application, + ID, + application.mapMenuClass.get(classEntity).abstractTab, + application.mapMenuClass.get(classEntity).name); + bt.addStyleName(BaseTheme.BUTTON_LINK); + return bt; + } + } + catch (Throwable e){ + } + } + + return null; + } + }; + + + + + + + + + public DBListPanel(AdminMain application, + Class classDB, + final CustomDescriptor descriptor, + Dimension dim, + Set setMode){ + + this.classDB = classDB; + this.application = application; + this.descriptor = descriptor; + this.dim = dim; + this.setBlockedRecords = new HashSet(); + + int iHeight = 26; + for(CustomField customField : descriptor.listFields) { + if(customField.style.height > iHeight) { + iHeight = customField.style.height; + } + } + this.setMode = setMode; + this.constraint = new Constraint(); + + init(); + } + + + + + + public DBListPanel(AdminMain application, + Class classDB, + final CustomDescriptor descriptor, + Dimension dim, + Set setMode, + Order order){ + + this.classDB = classDB; + this.application = application; + this.descriptor = descriptor; + this.dim = dim; + this.setBlockedRecords = new HashSet(); + this.order = order; + + int iHeight = 26; + for(CustomField customField : descriptor.listFields){ + if(customField.style.height > iHeight){ + iHeight = customField.style.height; + } + } + this.setMode = setMode; + this.constraint = new Constraint(); + + init(); + } + + + + + + public DBListPanel(AdminMain application, + Class classDB, + final CustomDescriptor descriptor, + Dimension dim, + Set setMode, + Constraint constraint){ + this.classDB = classDB; + this.application = application; + this.descriptor = descriptor; + this.dim = dim; + this.setMode = setMode; + this.constraint = constraint; + this.setBlockedRecords = new HashSet(); + + init(); + } + + + + + + + + public DBListPanel(AdminMain application, + Class classDB, + final CustomDescriptor descriptor, + Dimension dim, + Set setMode, + Constraint constraint, + Order order){ + this.classDB = classDB; + this.application = application; + this.descriptor = descriptor; + this.dim = dim; + this.setMode = setMode; + this.constraint = constraint; + this.setBlockedRecords = new HashSet(); + this.order = order; + + init(); + } + + + + + + + + + + public DBListPanel(AdminMain application, + Class classDB, + final CustomDescriptor descriptor, + Dimension dim, + Set setMode, + Constraint constraint, + Set setBlockedRecords){ + + this.classDB = classDB; + this.application = application; + this.descriptor = descriptor; + this.dim = dim; + this.setMode = setMode; + this.constraint = constraint; + this.setBlockedRecords = setBlockedRecords; + + init(); + } + + + + + + + + + + + + + @SuppressWarnings({ "rawtypes", "unchecked" }) + public void init(){ + this.table = new ExtendedTable(descriptor); + + + //Let's do some table calculation + int iHeight = dim.iHeight; + + //menu + iHeight -= 110; + + //No edit panel at all + if(setMode.size() == 0){ + iHeight += 30; + } + + + int iMaxSearchRow = 0; + for(Integer iRow : descriptor.mapSearchOrder.keySet()){ + if(iRow > iMaxSearchRow){ + iMaxSearchRow = iRow; + } + } + + iHeight -= ((iMaxSearchRow + 1) * 35); + + //this.setWidth("" + dim.iWidth + "px"); + //this.setHeight("" + iHeight + "px"); + + + table.setSizeFull(); + //table.setWidth("" + (dim.iWidth + 40) + "px"); + //table.setPageLength(new Double(iHeight / (ROW_HEIGHT * 3)).intValue()); + table.setCacheRate(10); + table.setHeight(iHeight + "px"); + + + + + VerticalLayout layout = (VerticalLayout) getContent(); + layout.setMargin(false); + layout.setSpacing(false); + + this.addComponent(sizeY(5, "panel-header")); + + table.setColumnCollapsingAllowed(true); + + + table.setSelectable(true); + table.setSortDisabled(true); + table.setTableFieldFactory(factory); + table.setEditable(true); + table.setImmediate(true); + + table.addListener(new LTable()); + table.addListener(new LHeader()); + table.addListener(new LTableNavigation()); + + + + + HorizontalLayout layTop = new HorizontalLayout(); + layTop.setWidth("100%"); + VerticalLayout layTopFilter = new VerticalLayout(); + HorizontalLayout layFilter = new HorizontalLayout(); + layFilter.setHeight(SEARCH_HEIGHT); + layFilter.addComponent(sizeX(5)); + + CURRENT_LANG.addListener(new LLangChange()); + + layFilter.addComponent(new Label("Язык:")); + layFilter.addComponent(sizeX(5)); + layFilter.addComponent(CURRENT_LANG); + layFilter.addComponent(sizeX(SEARCH_PADDING)); + + //TODO + for(int i = 0; i < descriptor.mapSearchOrder.keySet().size(); i++) { + List list = descriptor.mapSearchOrder.get(i); + + if(list == null){ + continue; + } + + for(CustomField cstField : list){ + java.lang.reflect.Field field = getField(cstField.db); + + if(field.isAnnotationPresent(AnnotationIncusiveList.class) ){ + Class classDescriptor = field.getAnnotation(AnnotationIncusiveList.class).foreign(); + + for(MAbstractDescriptor mAbstractDesriptor : + (List) MongoService.getList(classDescriptor)){ + + switch(cstField.search.mode){ + case BOOLEAN_ONLY_TRUE:{ + CheckBox cb = new CheckBox(); + cb.setImmediate(true); + cb.addListener(new LChangeFilter()); + mapFilterBooleanTrueOnly.put(cstField.db + "." + mAbstractDesriptor.ID, cb); + + layFilter.addComponent(new Label(mAbstractDesriptor.name.get(InterfaceConstants.LANGS.RU) + ":")); + layFilter.addComponent(sizeX(5)); + + layFilter.addComponent(cb); + layFilter.addComponent(sizeX(SEARCH_PADDING)); + break; + } + } + } + } + else{ + if(cstField instanceof CustomFixedComboField){ + + CustomFixedComboField cdf = (CustomFixedComboField) cstField; + + + Select select = new Select(); + + if(field.isAnnotationPresent(AnnotationRelated.class) ){ + Class classForeign = + field.getAnnotation(AnnotationRelated.class).foreign(); + + localizeCombos(cdf, classForeign); + } + + for(CustomFixedComboField.Element elem : cdf.getElements()){ + select.addItem(elem.text); + } + + + select.setImmediate(true); + select.addListener(new LChangeFilter()); + select.setNullSelectionAllowed(true); + mapFilterSelect.put(cstField.db, select); + + + select.setWidth(cstField.style.width + "px"); + select.setHeight("24px"); + + layFilter.addComponent(new Label(cstField.name + ":")); + layFilter.addComponent(sizeX(5)); + layFilter.addComponent(select); + layFilter.addComponent(sizeX(SEARCH_PADDING)); + } + if(cstField instanceof CustomDatabaseComboField){ + + CustomDatabaseComboField cdf = (CustomDatabaseComboField) cstField; + + + Select select = new Select(); + + if(field.isAnnotationPresent(AnnotationRelated.class) ){ + Class classForeign = + field.getAnnotation(AnnotationRelated.class).foreign(); + + localizeCombos(cdf, classForeign); + } + + for(CustomFixedComboField.Element elem : cdf.getElements()){ + select.addItem(elem.text); + } + + + select.setImmediate(true); + select.addListener(new LChangeFilter()); + select.setNullSelectionAllowed(true); + mapFilterSelect.put(cstField.db, select); + + + select.setWidth(cstField.style.width + "px"); + select.setHeight("24px"); + + layFilter.addComponent(new Label(cstField.name + ":")); + layFilter.addComponent(sizeX(5)); + layFilter.addComponent(select); + layFilter.addComponent(sizeX(SEARCH_PADDING)); + } + else{ + switch(cstField.search.mode){ + case INTEGER:{ + HorizontalLayout layH = new HorizontalLayout(); + + layH.addComponent(new Label(cstField.name + ":")); + layH.addComponent(sizeX(5)); + + ListSelect select = new ListSelect(); + select.setImmediate(true); + select.addListener(new LChangeFilter()); + select.setWidth("40px"); + select.setNullSelectionAllowed(false); + select.setRows(1); + select.addItem("="); + select.addItem("<"); + select.addItem(">"); + select.select(select.getItemIds().iterator().next()); + + mapFilterIntegerSign.put(cstField.db, select); + + layH.addComponent(select); + + TextField tf = new TextField(); + tf.setImmediate(true); + tf.addListener(new LChangeFilter()); + tf.setWidth("80px"); + mapFilterInteger.put(cstField.db, tf); + layH.addComponent(tf); + + layFilter.addComponent(layH); + layFilter.addComponent(sizeX(SEARCH_PADDING)); + break; + } + + case BOOLEAN:{ + ListSelect select = new ListSelect(cstField.name); + select.setImmediate(true); + select.addListener(new LChangeFilter()); + select.setWidth("60px"); + select.setNullSelectionAllowed(true); + select.setRows(1); + select.addItem("да"); + select.addItem("нет"); + // mapFilterSelect.put(field.db, select); + layFilter.addComponent(select); + layFilter.addComponent(sizeX(SEARCH_PADDING)); + break; + } + case BOOLEAN_ONLY_TRUE:{ + CheckBox cb = new CheckBox(); + cb.setImmediate(true); + cb.addListener(new LChangeFilter()); + mapFilterBooleanTrueOnly.put(cstField.db, cb); + + layFilter.addComponent(new Label(cstField.name + ":")); + layFilter.addComponent(sizeX(5)); + + layFilter.addComponent(cb); + layFilter.addComponent(sizeX(SEARCH_PADDING)); + break; + } + + case TIME_RANGE:{ + HorizontalLayout layH = new HorizontalLayout(); + + NativeSelect selHours = new NativeSelect(); + for(int f = 0; f < 24; f++){ + selHours.addItem(f); + }; + // selHours.setWidth("80px"); + layH.addComponent(selHours); + + // layH.addComponent(sizeX(5)); + + NativeSelect selMinutes = new NativeSelect(); + for(int f = 0; f < 59; f++){ + selMinutes.addItem(f); + }; + // selMinutes.setWidth("40px"); + layH.addComponent(selMinutes); + + layFilter.addComponent(new Label(cstField.name + ":")); + layFilter.addComponent(sizeX(5)); + + layFilter.addComponent(layH); + layFilter.addComponent(sizeX(SEARCH_PADDING)); + + break; + } + + case DATE_RANGE:{ + CustomDateField cdf = (CustomDateField) cstField; + + HorizontalLayout layH = new HorizontalLayout(); + //layH.setWidth("200px"); + DateField dfFrom = new DateField(); + dfFrom.setDateFormat("HH:mm dd.MM.yyyy"); + dfFrom.setImmediate(true); + dfFrom.setWidth("90px"); + dfFrom.addListener(new LChangeFilter()); + + layH.addComponent(new Label(cstField.name + ":")); + layH.addComponent(sizeX(5)); + layH.addComponent(dfFrom); + mapFilterDateFrom.put(cdf.db, dfFrom); + + layH.addComponent(sizeX(5)); + + DateField dfTo = new DateField(); + dfTo.setDateFormat("HH:mm dd.MM.yyyy"); + dfTo.setImmediate(true); + dfTo.setWidth("90px"); + dfTo.addListener(new LChangeFilter()); + layH.addComponent(new Label("
X
", Label.CONTENT_XHTML)); + layH.addComponent(sizeX(5)); + layH.addComponent(dfTo); + layFilter.addComponent(layH); + mapFilterDateTo.put(cdf.db, dfTo); + layFilter.addComponent(sizeX(SEARCH_PADDING)); + break; + } + case STRING:{ + layFilter.addComponent(new Label(cstField.name + ":")); + layFilter.addComponent(sizeX(5)); + + + TextField tf = new TextField(); + tf.setImmediate(true); + tf.addListener(new LChangeFilter()); + tf.setWidth("100%"); + mapFilterText.put(cstField.db, tf); + layFilter.addComponent(tf); + layFilter.addComponent(sizeX(SEARCH_PADDING)); + break; + } + case LOCALIZED_STRING:{ + layFilter.addComponent(new Label(cstField.name + ":")); + layFilter.addComponent(sizeX(5)); + + TextField tf = new TextField(); + tf.setImmediate(true); + tf.addListener(new LChangeFilter()); + tf.setWidth("100%"); + mapFilterLocalizedText.put(cstField.db, tf); + layFilter.addComponent(tf); + layFilter.addComponent(sizeX(SEARCH_PADDING)); + break; + } + } + } + } + } + + layTopFilter.addComponent(layFilter); + layFilter = new HorizontalLayout(); + layFilter.setHeight(SEARCH_HEIGHT); + layFilter.addComponent(sizeX(5)); + } + + + layTop.addComponent(layTopFilter); + + panelTopAddons.setMargin(false); + layTop.addComponent(panelTopAddons); + + layTop.setStyleName("panel-header"); + layTop.setExpandRatio(layTopFilter, 20.0f); + layTop.setExpandRatio(panelTopAddons, 0.1f); + + + layTop.setMargin(false); + this.addComponent(layTop); + + + + //sdfskdfksdkfpsf + //sodfiosjdfoisdf + + + + + + for(CustomField cstField : descriptor.listFields){ + java.lang.reflect.Field field = getField(cstField.db); + String sClassName = field.getGenericType().toString().toLowerCase(); + + if(field.isAnnotationPresent(AnnotationDate.class) ){ + table.addContainerProperty(cstField.name, Date.class, null); + } + if(field.isAnnotationPresent(AnnotationTime.class) ){ + table.addContainerProperty(cstField.name, String.class, null); + } + else if(field.isAnnotationPresent(AnnotationIncusiveList.class) ){ + + CustomMultiCombo cmc = (CustomMultiCombo) cstField; + + switch(cmc.type){ + case COMBO:{ + //Text version, just text + table.addContainerProperty(cstField.name, Object.class, null); + break; + } + default:{ + //Table with rows + Class classDescriptor = field.getAnnotation(AnnotationIncusiveList.class).foreign(); + + for(MAbstractDescriptor mAbstractDesriptor : + (List) MongoService.getList(classDescriptor)){ + + String sField = mAbstractDesriptor.name.get(InterfaceConstants.LANGS.RU); + + table.addContainerProperty(sField, Boolean.class, null); + + mapVirtualFields.put(sField, cstField); + + if(cstField.style.width > 0){ + table.setColumnWidth(sField, cstField.style.width); + } + } + break; + } + } + } + else if(field.isAnnotationPresent(AnnotationIncusiveListManual.class)){ + CustomFixedComboField ccf = (CustomFixedComboField) cstField; + + for(CustomFixedComboField.Element element : ccf.getElements()){ + + String sField = element.text; + + table.addContainerProperty(sField, Boolean.class, null); + + mapVirtualFields.put(sField, cstField); + + if(cstField.style.width > 0){ + table.setColumnWidth(sField, cstField.style.width); + } + } + } + else if(cstField instanceof CustomFixedComboField){ + // TODO + + CustomFixedComboField cdf = (CustomFixedComboField) cstField; + + table.addContainerProperty(cstField.name, String.class, null); + + if(cdf.type == CustomFixedComboField.TYPE.TEXT){ + } + else if(cdf.type == CustomFixedComboField.TYPE.IMAGE){ + final ColumnGenerator generator = new ColumnGenerator(){ + private static final long serialVersionUID = -8477027423194414697L; + + @Override + public Component generateCell(Table source, Object itemId, Object columnId){ + String sField = "" + columnId; + + CustomFixedComboField ccf = + (CustomFixedComboField) descriptor.mapNames.get(sField.substring(0, sField.length() - 1)); + + Object objValue = table.getItem(itemId).getItemProperty(ccf.name).getValue(); + + try{ + return new Label(ccf.get("" + objValue).image, Label.CONTENT_XHTML); + } + catch (Exception e){ + return new Label(""); + } + } + }; + table.addGeneratedColumn(cstField.name + " ", generator); + table.setColumnAlignment(cstField.name + " ", Table.ALIGN_CENTER); + table.setColumnWidth(cstField.name + " ", cstField.style.width); + } + } + else if(field.isAnnotationPresent(AnnotationImage.class) ){ + CustomImageField cdf = (CustomImageField) cstField; + + if(cdf.isImageInTable){ + table.addContainerProperty(cstField.name, Label.class, null); + } + else{ + table.addContainerProperty(cstField.name, String.class, null); + try{ + table.setColumnCollapsed(cstField.name, true); + } + catch (Throwable e){ + } + } + } + else if(field.isAnnotationPresent(AnnotationPrice.class) ){ + table.addContainerProperty(cstField.name, String.class, null); + } + else if(sClassName.contains("integer")){ + table.addContainerProperty(cstField.name, String.class, null); + } + else if(sClassName.contains("long")){ + table.addContainerProperty(cstField.name, String.class, null); + } + else if(sClassName.contains("bool")){ + table.addContainerProperty(cstField.name, Boolean.class, null); + } + else if(sClassName.contains("float")){ + table.addContainerProperty(cstField.name, Float.class, null); + } + else if(sClassName.contains("double")){ + table.addContainerProperty(cstField.name, Double.class, null); + } + else{ + table.addContainerProperty(cstField.name, String.class, null); + } + + switch(cstField.style.alignment){ + case LEFT:{ + table.setColumnAlignment(cstField.name, Table.ALIGN_LEFT); + break; + } + case RIGHT:{ + table.setColumnAlignment(cstField.name, Table.ALIGN_LEFT); + break; + } + default:{ + table.setColumnAlignment(cstField.name, Table.ALIGN_CENTER); + break; + } + } + + + // else if(field.isAnnotationPresent(MultiLangString.class) ){ + // + // for(InterfaceConstants.LANGS lang : + // InterfaceConstants.LANGS.values()) { + // table.addContainerProperty(cstField.name + " (" + lang + ")", + // Double.class, null); + // } + // } + // else{ + // table.addContainerProperty(cstField.name, String.class, null); + // } + + if(cstField.style.width > 0){ + table.setColumnWidth(cstField.name, cstField.style.width); + } + + if(cstField.visible){ + } + else{ + try{ + table.setColumnCollapsed(cstField.name, true); + } + catch (Throwable e){ + } + } + } + + + + + table.setCellStyleGenerator(new Table.CellStyleGenerator(){ + private static final long serialVersionUID = 5026899277989475366L; + @Override + public String getStyle(Object itemId, Object propertyId){ + if(propertyId == null){ + // Styling for row + + if(setBlockedRecords.contains(itemId)){ + return "highlight-blocked"; + } + else{ + return null; + } + +// Item item = table.getItem(itemId); +// String firstName = (String) item.getItemProperty("First Name").getValue(); +// if(firstName.toLowerCase().startsWith("g")){ +// return "highlight-green"; +// } +// else if(firstName.contains("o")){ +// return "highlight-red"; +// } +// else{ +// return null; +// } + } + else{ + // styling for column propertyId + return null; + } + } + }); + + + + + + + // Default Sort Order + if(order == null) { + CustomField customField = descriptor.listFields.get(0); + order = new Order(Order.CREATER, customField.db, customField.name); + } + + this.addComponent(table); + + this.addComponent(sizeY(10)); + + HorizontalLayout layHBottomButtons = new HorizontalLayout(); + + layHBottomButtons.addComponent(sizeX(5)); + + + + + btFirst.addListener(new LFirst()); + btPrev.addListener(new LPrev()); + tfPage.setEnabled(false); + tfPage.setWidth("40px"); + tfTotal.setEnabled(false); + tfTotal.setWidth("40px"); + + btGo.setIcon(new ThemeResource("enter.png")); + //btGo.addStyleName(BaseTheme.BUTTON_LINK); + + btGo.addListener(new LChangePage()); + btNext.addListener(new LNext()); + btLast.addListener(new LLast()); + + + layHBottomButtons.addComponent(btFirst); + layHBottomButtons.addComponent(sizeX(5)); + layHBottomButtons.addComponent(btPrev); + layHBottomButtons.addComponent(sizeX(5)); + layHBottomButtons.addComponent(tfPage); + layHBottomButtons.addComponent(sizeX(5)); + layHBottomButtons.addComponent(tfTotal); + layHBottomButtons.addComponent(sizeX(5)); + layHBottomButtons.addComponent(btGo); + layHBottomButtons.addComponent(sizeX(5)); + layHBottomButtons.addComponent(btNext); + layHBottomButtons.addComponent(sizeX(5)); + layHBottomButtons.addComponent(btLast); + layHBottomButtons.addComponent(sizeX(20)); + + + + + + btReload.addListener(new ClickListener(){ + private static final long serialVersionUID = -2584869015591888148L; + + @Override + public void buttonClick(ClickEvent event){ + //Let's clean cache + Caching.clean(); + + reload(); + } + }); + layHBottomButtons.addComponent(btReload); + layHBottomButtons.addComponent(sizeX(10)); + + + + btAdd.addListener(new ClickListener(){ + private static final long serialVersionUID = -8451527793751514391L; + + @Override + public void buttonClick(com.vaadin.ui.Button.ClickEvent arg0){ + Object obj = addNewRecordToDB(); + + int iNewRecordID = insertEmptyRecord(obj); + + + itemId = iNewRecordID; + sItemId = "" + itemId; + + + table.setCurrentPageFirstItemIndex(table.size()); + table.select(iNewRecordID); + + switchToEditMode(); + } + }); + if(setMode.contains(AccessConstants.EditMode.ADD)){ + layHBottomButtons.addComponent(btAdd); + } + layHBottomButtons.addComponent(sizeX(5)); + + + + + btEdit.addListener(new ClickListener(){ + private static final long serialVersionUID = -5176789668185463994L; + @Override + public void buttonClick(com.vaadin.ui.Button.ClickEvent arg0){ + switchToEditMode(); + } + }); + if(setMode.contains(AccessConstants.EditMode.CHANGE)){ + layHBottomButtons.addComponent(btEdit); + } + + + + + + layHBottomButtons.addComponent(btSave); + btSave.addListener(new ClickListener(){ + private static final long serialVersionUID = -5176789668185463994L; + @Override + public void buttonClick(com.vaadin.ui.Button.ClickEvent arg0){ + //Let's clean cache + Caching.clean(); + + if(saveChanges()){ + switchToReadMode(); + } + } + }); + layHBottomButtons.addComponent(btSave); + + + + + layHBottomButtons.addComponent(sizeX(5)); + + + + + + btCancel.addListener(new ClickListener(){ + private static final long serialVersionUID = -5176789668185463994L; + @Override + public void buttonClick(com.vaadin.ui.Button.ClickEvent arg0){ + cancelChanges(); + switchToReadMode(); + } + }); + layHBottomButtons.addComponent(btCancel); + + + + + + + //delete button + if(setMode.contains(AccessConstants.EditMode.DELETE)){ + btDelete.addListener(new ClickListener(){ + private static final long serialVersionUID = -4879909695860169610L; + + @Override + public void buttonClick(com.vaadin.ui.Button.ClickEvent arg0){ + //Let's clean cache + Caching.clean(); + + int ID = (Integer) table.getValue(); + deleteRecord((Integer) table.getValue()); + + table.removeItem(ID); + + if(ID > 1){ + itemId = (ID - 1); + sItemId = "" + itemId; + } + + validateButtons(); + } + }); + layHBottomButtons.addComponent(btDelete); + } + + + + + panelBottomAddons.setMargin(false); + layHBottomButtons.addComponent(panelBottomAddons); + + + //Let's inject default publish/unpublish here + CustomField customField = descriptor.mapDBFields.get(MAbstractEditableDataElement.F_PUBLISHED); + + if(customField == null){ + } + else{ + panelBottomAddons.addComponent(sizeX(5)); + panelBottomAddons.addComponent(new ExtraPanelPublishAll(this)); + panelBottomAddons.addComponent(sizeX(5)); + panelBottomAddons.addComponent(new ExtraPanelUnPublishAll(this)); + } + + + + + if(application.isAdmin){ + btUnDelete.addListener(new ClickListener(){ + + private static final long serialVersionUID = 8384979999347976522L; + + @Override + public void buttonClick(ClickEvent event){ + MongoService.undelete(classDB, (int) itemId); + table.removeItem(itemId); + } + }); + layHBottomButtons.addComponent(btUnDelete); + + + + layHBottomButtons.addComponent(sizeX(20)); + + cbShowDeleted.setImmediate(true); + cbShowDeleted.addListener(new ClickListener(){ + private static final long serialVersionUID = 8384979999347976522L; + + @Override + public void buttonClick(ClickEvent event){ + validateButtons(); + reload(); + } + }); + layHBottomButtons.addComponent(cbShowDeleted); + } + + + layHBottomButtons.setHeight("30px"); + + if(!application.isAdmin && setMode.size() == 0){ + //no edit panel at all + } + else{ + this.addComponent(layHBottomButtons); + } + + NOT_INITED_YET = false; + + + table.setTableFieldFactory(factory); + table.setEditable(true); + table.setImmediate(true); + + + switchToReadMode(); + + //Initialization end + } + + + + + + + boolean bRecordHasBeenFound = false; + int iRecordOrder = 0; + + public int reload(){ + if(NOT_INITED_YET){ + return 1; + } + + long lStartTime = System.currentTimeMillis(); + log.info(LOG + "Page reload: " + classDB.getName()); + + + grabSelectedIDes(); + + + table.removeAllItems(); + + bRecordHasBeenFound = false; + iRecordOrder = 0; + + + //TODO + Query query = MongoService.ds + .find(classDB) + .order(order.toMongo()); + + if(cbShowDeleted.booleanValue()){ + query.filter(MAbstractEditableDataElement.F_DELETED, true); + } + else{ + query.filter(MAbstractEditableDataElement.F_DELETED, false); + } + + + //Constraints + for(Constraint.Criterion criterion : constraint.criteria){ + query.filter(criterion.field, criterion.value); + } + + + for(String sField : mapFilterSelect.keySet()){ + Object value = mapFilterSelect.get(sField).getValue(); + + if(value == null || "".equals(value)){ + } + else{ + AbstractComboField ccf = (AbstractComboField) descriptor.mapDBFields.get(sField); + + query.filter(sField, ccf.get("" + value).id); + } + } + + + + for(String sField : mapFilterInteger.keySet()){ + java.lang.reflect.Field classField = getField(sField); + String sClassFieldType = classField.toString(); + + try{ + Object obj; + if(sClassFieldType.contains("float")) { + obj = Float.parseFloat("" + mapFilterInteger.get(sField).getValue()); + } + if(sClassFieldType.contains("double")) { + obj = Double.parseDouble("" + mapFilterInteger.get(sField).getValue()); + } + else{ + + if(classField.isAnnotationPresent(AnnotationPrice.class) ) { + obj = (int) (Float.parseFloat("" + mapFilterInteger.get(sField).getValue()) * 100); + } + else { + obj = Integer.parseInt("" + mapFilterInteger.get(sField).getValue()); + } + } + + query.filter(sField + " " + mapFilterIntegerSign.get(sField), obj); + } + catch (NumberFormatException e){ + //non integer value + } + } + + + + for(String sField : mapFilterLocalizedText.keySet()){ + Object sValue = "" + mapFilterLocalizedText.get(sField).getValue(); + + if(sValue == null || "".equals(sValue)){ + } + else{ +// Pattern regexp = Pattern.compile("" + sValue, Pattern.CASE_INSENSITIVE); +// query.filter(sField + "." + CURRENT_LANG.getValue(), regexp); + + Pattern regexp = Pattern.compile(("" + sValue).toLowerCase()); + query.filter(sField + "_." + CURRENT_LANG.getValue(), regexp); + } + } + + + + for(String sField : mapFilterText.keySet()){ + Object sValue = "" + mapFilterText.get(sField).getValue(); + + if(sValue == null || "".equals(sValue)){ + } + else{ + Pattern regexp = Pattern.compile("" + sValue, Pattern.CASE_INSENSITIVE); + query.filter(sField, regexp); + } + } + + + + for(String sField : mapFilterBooleanTrueOnly.keySet()){ + boolean bChecked = mapFilterBooleanTrueOnly.get(sField).booleanValue(); + + if(bChecked){ + try{ + String[] arrstrField = sField.split("\\."); + query.field(arrstrField[0]).hasThisOne(Integer.parseInt(arrstrField[1])); + } + catch (Exception e){ + query.filter(sField, true); + } + } + } + + + + //Date + for(String sField : mapFilterDateFrom.keySet()){ + try{ + DateField df = mapFilterDateFrom.get(sField); + + long lDate = ((Date) df.getValue()).getTime(); + + query.filter(sField + " >", lDate); + } + catch (Exception e){ + } + } + for(String sField : mapFilterDateTo.keySet()){ + try{ + DateField df = mapFilterDateTo.get(sField); + + long lDate = ((Date) df.getValue()).getTime(); + + query.filter(sField + " <", lDate); + } + catch (Exception e){ + } + } + + + + + + long iRecordsAmount = query.countAll(); + + this.iMaxPages = (int) iRecordsAmount / PAGE_SIZE; + if(iRecordsAmount % PAGE_SIZE == 0){ + } + else{ + this.iMaxPages++; + } + + if(iCurrentPage - 1 > iMaxPages){ + iCurrentPage = iMaxPages; + } + + adjustNavigation(); + + + + //LET'S LOAD! + LogTableFormatter ltf = new LogTableFormatter(1, true); + + try { + for(Object obj : query.offset((iCurrentPage - 1)* PAGE_SIZE).limit(PAGE_SIZE).asList()){ + long lStartTimeRecord = System.currentTimeMillis(); + + insertEmptyRecord(obj); + + if(log.isDebugEnabled()) { + ltf.addCell(((MAbstractDataElement) obj).humanReadable(InterfaceConstants.LANGS.valueOf("" + CURRENT_LANG.getValue()))); + ltf.addCell((System.currentTimeMillis() - lStartTimeRecord) + " ms"); + ltf.br(); + } + } + } + finally { + if(log.isDebugEnabled()){ + log.trace(LOG + "\n" + ltf.toString()); + } + } + + + //Let's hightlight the things + for(Object ID : table.getItemIds()){ + if(setSelectedIDes.contains((int) ID)){ + table.select(ID); + } + } + + + log.info(LOG + "ok, time=" + (System.currentTimeMillis() - lStartTime) + " ms"); + + return iRecordOrder; + } + + + + + + + + + + + + @SuppressWarnings({ "rawtypes", "unchecked" }) + public int insertEmptyRecord(Object obj){ + List row = new ArrayList(); + + int ID = 0; + + for(CustomField cstField : descriptor.listFields){ + log.trace(LOG + "field=" + cstField.db); + + java.lang.reflect.Field field = getField(cstField.db); + + Object objValue; + try{ + objValue = field.get(obj); + } + catch (Exception e){ + throw new Error("Field access value=" + cstField.db + " failed.", e); + } + + if("ID".equalsIgnoreCase(cstField.db)){ + ID = (Integer) objValue; + + if(("" + objValue).equals(sItemId)){ + bRecordHasBeenFound = true; + } + + if(bRecordHasBeenFound){ + } + else{ + iRecordOrder++; + } + } + + + + //Related Boolean List + if(field.isAnnotationPresent(AnnotationIncusiveList.class) ){ + + CustomMultiCombo cmc = (CustomMultiCombo) cstField; + + + Set set = (Set) objValue; + Class classDescriptor = field.getAnnotation(AnnotationIncusiveList.class).foreign(); + + + switch(cmc.type){ + case COMBO:{ + //Text version, just text + + List listValues = new ArrayList(); + + for(Object objDescriptor : Caching.getList(classDescriptor)){ + MAbstractDescriptor mAbstractDesriptor = (MAbstractDescriptor) objDescriptor; + + if(set.contains(mAbstractDesriptor.ID)){ + listValues.add(mAbstractDesriptor.name.get(InterfaceConstants.LANGS + .valueOf("" + CURRENT_LANG.getValue()))); + } + } + + row.add(listValues); + +// StringBuilder sbCommaSeparatedStringValue = new StringBuilder(); +// +// for(Object objDescriptor : Caching.getList(classDescriptor)){ +// MAbstractDescriptor mAbstractDesriptor = (MAbstractDescriptor) objDescriptor; +// +// if(set.contains(mAbstractDesriptor.ID)) { +// if(sbCommaSeparatedStringValue.length() > 0){ +// sbCommaSeparatedStringValue.append(","); +// } +// +// sbCommaSeparatedStringValue.append(mAbstractDesriptor.name.get(InterfaceConstants.LANGS.valueOf("" + CURRENT_LANG.getValue()))); +// } +// } +// +// row.add(sbCommaSeparatedStringValue.toString()); + break; + } + default:{ + //Table with rows + + for(Object objDescriptor : Caching.getList(classDescriptor)){ + MAbstractDescriptor mAbstractDesriptor = (MAbstractDescriptor) objDescriptor; + row.add(set.contains(mAbstractDesriptor.ID)); + } + break; + } + } + } + else if(field.isAnnotationPresent(AnnotationIncusiveListManual.class)){ + CustomFixedComboField ccf = (CustomFixedComboField) cstField; + + Set set = (Set) objValue; + + for(CustomFixedComboField.Element element : ccf.getElements()){ + row.add(set.contains(element.id)); + } + } + + + // MultiString + else if(field.isAnnotationPresent(AnnotationMultiLangString.class) ){ + Map map; + try{ + map = (Map) field.get(obj); + } + catch (Exception e){ + throw new Error("Field access value=" + cstField.db + " failed.", e); + } + + String sValue = + map.get(InterfaceConstants.LANGS.valueOf("" + CURRENT_LANG.getValue())); + + if(sValue == null){ + sValue = ""; + } + + row.add(sValue); + } + + + + + + //Combo + else if(cstField instanceof CustomFixedComboField){ + // TODO + + CustomFixedComboField cdf = (CustomFixedComboField) cstField; + + + if(field.isAnnotationPresent(AnnotationRelated.class) ){ + Class classForeign = + field.getAnnotation(AnnotationRelated.class).foreign(); + + localizeCombos(cdf, classForeign); + } + + try{ + Integer id = (Integer) objValue; + + if(cdf.type == CustomFixedComboField.TYPE.TEXT){ + row.add((cdf.get(id)).text); + } + else if(cdf.type == CustomFixedComboField.TYPE.IMAGE){ + row.add((cdf.get(id)).text); + } + } + catch (NullPointerException e){ + row.add(null); + } + } + + + //Combo + else if(cstField instanceof CustomDatabaseComboField){ + // TODO + + CustomDatabaseComboField cdf = (CustomDatabaseComboField) cstField; + + + if(field.isAnnotationPresent(AnnotationRelated.class) ){ + Class classForeign = + field.getAnnotation(AnnotationRelated.class).foreign(); + + localizeCombos(cdf, classForeign); + } + else{ + throw new Error("No annotation 'related' for field=" + cstField.db); + } + + try{ + Integer id = (Integer) objValue; + + if(cdf.type == CustomFixedComboField.TYPE.TEXT){ + row.add((cdf.get(id)).text); + } + else if(cdf.type == CustomFixedComboField.TYPE.IMAGE){ + row.add((cdf.get(id)).text); + } + } + catch (NullPointerException e){ + row.add(null); + } + } + + + + + + + // Date + else if(field.isAnnotationPresent(AnnotationDate.class) ){ + row.add(new Date((Long) objValue)); + } + + + + + + // Time + else if(field.isAnnotationPresent(AnnotationTime.class)){ + if(objValue == null){ + row.add(""); + } + else{ + int iMunutes = (Integer) objValue; + + String sHours = "" + iMunutes / 60; + if(sHours.length() < 2) { + sHours = "0" + sHours; + } + + String sMinutes = "" + iMunutes % 60; + if(sMinutes.length() < 2) { + sMinutes = "0" + sMinutes; + } + + row.add(sHours + ":" + sMinutes); + } + } + + //Price + else if(field.isAnnotationPresent(AnnotationPrice.class) ){ + row.add(formatPrice(objValue)); + } + + //Image + else if(field.isAnnotationPresent(AnnotationImage.class) ){ + CustomImageField cdf = (CustomImageField) cstField; + + if(cdf.isImageInTable){ + row.add(super.image2ClickableLabel("" + objValue, cdf.style.height)); + } + else{ + row.add(objValue); + } + } + + + + // Default + else{ + if(objValue == null){ + row.add(""); + } + else { + row.add(objValue); + } + } + } + + //Let's check controllers + for(CustomField cstField : descriptor.listFields){ + if(cstField instanceof FCustomController){ + //Controllers + } + } + + table.addItem(row.toArray(), ID); + + return ID; + } + + + + + + + + + + public Object addNewRecordToDB(){ + MAbstractEditableDataElement abstractDataElement; + try{ + abstractDataElement = (MAbstractEditableDataElement) classDB.newInstance(); + } + catch (Exception e){ + throw new Error("Can not instance=" + classDB.getName(), e); + } + + abstractDataElement.ID = MongoService.getUniqueID(classDB); + + //Filling empty names +// if(abstractDataElement instanceof MAbstractDescriptor){ +// MAbstractDescriptor mAbstractDescriptor = (MAbstractDescriptor) abstractDataElement; +// +// String sValue = descriptor.mapDBFields.get("name").name + " " + abstractDataElement.ID; +// +// for(InterfaceConstants.LANGS lang : InterfaceConstants.LANGS.values()) { +// mAbstractDescriptor.name.put(lang, sValue); +// } +// } + + + //Let's set constraints + injectConstraints(abstractDataElement); + + MongoService.save(abstractDataElement); + + for(IHookAdd hookAdds : listHookAdds) { + hookAdds.signal(this, abstractDataElement.ID); + } + + return abstractDataElement; + } + + + + + public void deleteRecord(int ID){ + MAbstractEditableDataElement obj = (MAbstractEditableDataElement) MongoService.get(classDB, ID); + + obj.deleted = true; + + MongoService.save(obj); + + for(IHookDelete hookDelete : listHookDeletes) { + hookDelete.signal(this, ID); + } + } + + + + + + public void undeleteRecord(int ID){ + MongoService.undelete(classDB, (int) itemId); + + + for(IHookUndelete hookUnDelete : listHookUnDeletes) { + hookUnDelete.signal(this, ID); + } + } + + + + + + + + + private class LLangChange implements Property.ValueChangeListener{ + private static final long serialVersionUID = -1849407624556332799L; + @Override + public void valueChange(ValueChangeEvent event){ + application.lang = (InterfaceConstants.LANGS) CURRENT_LANG.getValue(); + + reloadTableAndSelectRow(itemId); + } + } + + + + + + private class LTableNavigation implements Property.ValueChangeListener{ + private static final long serialVersionUID = 4070736652882106189L; + + @Override + public void valueChange(ValueChangeEvent event){ + if(isEditMode){ + } + else{ + try{ + itemId = Integer.parseInt("" + event.getProperty()); + sItemId = new String("" + itemId); + } + catch (Throwable e){ + itemId = null; + sItemId = null; + } + + for(AbstractExtendedPanel panel : listExtraPanels){ + panel.changeFocus(); + } + + validateButtons(); + } + } + } + + + + + + + + + + + private class LTable implements ItemClickEvent.ItemClickListener{ + private static final long serialVersionUID = -4185572626317638052L; + + public void itemClick(ItemClickEvent event){ + if(setMode.contains(AccessConstants.EditMode.CHANGE)){ + if(event.isDoubleClick()){ + + if(isEditMode){ + // if(finishEditMode() == false){ + // return; + // } + + if(saveChanges()){ + table.setSelectable(true); + switchToReadMode(); + } + else{ + table.setSelectable(false); + table.select(itemId); + return; + } + } + else{ + switchToEditMode(); + } + } + else{ + if(isEditMode){ + + if(saveChanges()){ + table.setSelectable(true); + switchToReadMode(); + } + else{ + table.setSelectable(false); + table.select(itemId); + return; + } + + // if(finishEditMode() == false){ + // return; + // } + + // int iCurrentPage = ComponentDBList.this.iCurrentPage; + + // selectRow(itemId, false); + + // if(iCurrentPage == ComponentDBList.this.iCurrentPage){ + // table.unselect(itemId); + // table.select(event.getItemId()); + // } + } + } + } + + itemId = event.getItemId(); + sItemId = new String("" + event.getItemId()); + + System.out.println("ID=" + sItemId); + + // if(bWritable){ + // btAction.setEnabled(true); + // btDelete.setEnabled(true); + // } + } + } + + protected class LHeader implements Table.HeaderClickListener{ + private static final long serialVersionUID = -757717169061143653L; + + + + + + public void headerClick(HeaderClickEvent event){ + String sColumn = (String) event.getPropertyId(); + + CustomField cstmField = descriptor.mapNames.get(sColumn); + + if(cstmField.isSortable){ + // Remove old icons + for(String sHeader : table.getColumnHeaders()){ + table.setColumnIcon(sHeader, null); + } + + if(order.name.equals(sColumn)){ + if(order.type == Order.LESS){ + order = new Order(Order.CREATER, cstmField.db, cstmField.name); + table.setColumnIcon(sColumn, new ThemeResource("../custom/asc1.png")); + } + else{ + order = new Order(Order.LESS, cstmField.db, cstmField.name); + table.setColumnIcon(sColumn, new ThemeResource("../custom/dsc1.png")); + } + } + else{ + order = new Order(Order.CREATER, cstmField.db, cstmField.name); + table.setColumnIcon(sColumn, new ThemeResource("../custom/asc1.png")); + } + + reloadTableAndSelectRow(itemId); + } + } + } + + + + + + private void validateButtons(){ + if(cbShowDeleted.booleanValue()){ + btReload.setVisible(false); + btAdd.setVisible(false); + btEdit.setVisible(false); + btDelete.setVisible(false); + btSave.setVisible(false); + btCancel.setVisible(false); + + btUnDelete.setVisible(true); + panelBottomAddons.setVisible(false); + } + else{ + btUnDelete.setVisible(false); + panelBottomAddons.setVisible(true); + + if(itemId == null || setBlockedRecords.contains(itemId)){ + btReload.setVisible(true); + btAdd.setVisible(true); + btEdit.setEnabled(false); + btDelete.setEnabled(false); + btSave.setVisible(false); + btCancel.setVisible(false); + } + else{ + if(isEditMode){ + btReload.setVisible(false); + btAdd.setVisible(false); + btEdit.setEnabled(false); + btEdit.setVisible(false); + btDelete.setEnabled(false); + btDelete.setVisible(false); + btSave.setVisible(true); + btCancel.setVisible(true); + } + else { + btReload.setVisible(true); + btAdd.setVisible(true); + btEdit.setEnabled(true); + btEdit.setVisible(true); + btDelete.setEnabled(true); + btDelete.setVisible(true); + btSave.setVisible(false); + btCancel.setVisible(false); + } + } + } + } + + + + + + private void switchToEditMode(){ + Iterator it = panelBottomAddons.getComponentIterator(); + while(it.hasNext()){ + it.next().setVisible(false); + } + + + try{ + oldValueMongoObject = + (MAbstractEditableDataElement) MongoService.ds.find(classDB) + .filter(descriptor.listFields.get(0).db, Integer.parseInt("" + itemId)).get(); + } + catch (Throwable e){ + //Something wrong with current row + //let's discard edit + return; + } + + + for(CustomField cstField : descriptor.listFields){ + if(cstField instanceof CustomFixedComboField){ + CustomFixedComboField cdf = (CustomFixedComboField) cstField; + + if(cdf.type == CustomFixedComboField.TYPE.IMAGE){ + try{ + table.setColumnCollapsed(cstField.name + " ", true); + table.setColumnCollapsed(cstField.name, false); + } + catch (Throwable e){ + } + } + } + + try{ + mapOldValuesInTable.put(cstField.name, table.getItem(itemId).getItemProperty(cstField.name).getValue()); + } + catch (Throwable e){ + //nothing to save, a new object + } + } + + + isEditMode = true; + table.setEditable(true); + + CURRENT_LANG.setEnabled(false); + validateButtons(); + application.menubar.setEnabled(false); + } + + + + + + + + public void switchToReadMode(){ + //Remove all editable components + mapEditModeComponents.clear(); + + Iterator it = panelBottomAddons.getComponentIterator(); + while(it.hasNext()){ + it.next().setVisible(true); + } + + + //Hide aux columns + for(CustomField cstField : descriptor.listFields){ + if(cstField instanceof CustomFixedComboField){ + CustomFixedComboField cdf = (CustomFixedComboField) cstField; + + if(cdf.type == CustomFixedComboField.TYPE.IMAGE){ + try{ + table.setColumnCollapsed(cstField.name + " ", false); + table.setColumnCollapsed(cstField.name, true); + } + catch (Throwable e){ + } + } + } + } + + + + isEditMode = false; + + //table.setEditable(false); + table.setTableFieldFactory(factory); + table.setEditable(true); + + CURRENT_LANG.setEnabled(true); + validateButtons(); + application.menubar.setEnabled(true); + } + + + + + public void cancelChanges(){ + for(CustomField cstField : descriptor.listFields){ + try{ + table.getItem(itemId).getItemProperty(cstField.name).setValue(mapOldValuesInTable.get(cstField.name)); + } + catch (Throwable e){ + //something wrong wtih null value + //let's skip it + } + } + } + + + + + + @SuppressWarnings({ "unchecked", "rawtypes" }) + public boolean saveChanges(){ + + if(oldValueMongoObject == null){ + // it is nothing to edit + // Strange, but let's skip it + } + else{ + for(CustomField cstField : descriptor.listFields){ + try{ + if(cstField.isEditable){ + java.lang.reflect.Field field = getField(cstField.db); + + + //Inclusive list + if(field.isAnnotationPresent(AnnotationIncusiveList.class)){ + + Set set; + try{ + set = (Set) field.get(oldValueMongoObject); + } + catch (Exception e){ + throw new Error("Field access value=" + cstField.db + " failed.", e); + } + + Class classDescriptor = field.getAnnotation(AnnotationIncusiveList.class).foreign(); + + + + CustomMultiCombo cdf = (CustomMultiCombo) cstField; + switch (cdf.type){ + case TABLE:{ + for(MAbstractDescriptor mAbstractDesriptor : + (List) MongoService.getList(classDescriptor)){ + + String sFieldName = mAbstractDesriptor.name.get(InterfaceConstants.LANGS.RU); + Boolean bValure = Boolean.parseBoolean("" + table.getItem(itemId).getItemProperty(sFieldName)); + + if(bValure){ + set.add(mAbstractDesriptor.ID); + } + else { + set.remove(mAbstractDesriptor.ID); + } + } + + break; + } + + + default:{ + set.clear(); + + Object objValue = table.getItem(itemId).getItemProperty(cstField.name); + String sAllInLine = "" + objValue; + + Set setValues = new HashSet(); + + try{ + String[] arrstrValues = + sAllInLine.substring(1, sAllInLine.length() - 1).split(","); + + for(String sValue : arrstrValues){ + setValues.add(sValue.trim()); + } + } + catch (Exception e){ + } + + for(MAbstractDescriptor mAbstractDesriptor : + (List) MongoService.getList(classDescriptor)){ + + if(setValues.contains(mAbstractDesriptor.name.get(InterfaceConstants.LANGS.valueOf("" + CURRENT_LANG.getValue())))){ + set.add(mAbstractDesriptor.ID); + } + } + + break; + } + } + + continue; + } + //Inclusive list Manual + else if(field.isAnnotationPresent(AnnotationIncusiveListManual.class) ){ + Set set; + try{ + set = (Set) field.get(oldValueMongoObject); + } + catch (Exception e){ + throw new Error("Field access value=" + cstField.db + " failed.", e); + } + + + CustomFixedComboField ccf = (CustomFixedComboField) cstField; + + + for(CustomFixedComboField.Element element : ccf.getElements()){ + String sFieldName = element.text; + Boolean bValure = Boolean.parseBoolean("" + table.getItem(itemId).getItemProperty(sFieldName)); + + if(bValure){ + set.add(element.id); + } + else { + set.remove(element.id); + } + } + } + else{ + String sField = field.toString(); + Object objValue = table.getItem(itemId).getItemProperty(cstField.name); + String sValue = "" + objValue; + + // Let's validate the things + // 1. Empty line + if(cstField.isMust && ("".equals(sValue) || "null".equals(sValue))){ + this.getApplication() + .getMainWindow() + .showNotification("Поле '" + cstField.name + "' не может быть пустым", + Notification.TYPE_WARNING_MESSAGE); + + return false; + } + + Object objReady = null; + + // MultiString + if(field.isAnnotationPresent(AnnotationMultiLangString.class) ){ + Map map; + try{ + map = (Map) field.get(oldValueMongoObject); + } + catch (Exception e){ + throw new Error("Field access value=" + cstField.db + " failed.", e); + } + + map.put(InterfaceConstants.LANGS.valueOf("" + CURRENT_LANG.getValue()), sValue); + + + //Let's copy the thing to the empty language values + if(sValue == null || "".equals(sValue)){ + } + else{ + for(InterfaceConstants.LANGS lang : InterfaceConstants.LANGS.values()){ + String sLocalizedValue = map.get(lang); + if(sLocalizedValue == null || "".endsWith(sLocalizedValue)) { + map.put(lang, sValue); + } + } + } + + objReady = map; + } + + + // Combo + else if(cstField instanceof CustomFixedComboField){ + // TODO + + try{ + CustomFixedComboField cdf = (CustomFixedComboField) cstField; + + if(cdf.type == CustomFixedComboField.TYPE.TEXT){ + objReady = cdf.get(sValue).id; + } + else if(cdf.type == CustomFixedComboField.TYPE.IMAGE){ + objReady = cdf.get(sValue).id; + } + } + catch (Throwable e){ + //Empty value + //it's ok + continue; + } + } + + + // Combo + else if(cstField instanceof CustomDatabaseComboField){ + // TODO + + try{ + CustomDatabaseComboField cdf = (CustomDatabaseComboField) cstField; + + if(cdf.type == CustomFixedComboField.TYPE.TEXT){ + objReady = cdf.get(sValue).id; + } + else if(cdf.type == CustomFixedComboField.TYPE.IMAGE){ + objReady = cdf.get(sValue).id; + } + } + catch (Throwable e){ + //Empty value + //it's ok + continue; + } + } + + + + // Date + else if(field.isAnnotationPresent(AnnotationDate.class) ){ + SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM d HH:mm:ss z yyyy", Locale.ENGLISH); + try{ + objReady = (sdf.parse("" + objValue)).getTime(); + } + catch (Throwable e){ + this.getApplication() + .getMainWindow() + .showNotification("Ошибочный формат даты в '" + cstField.name + "'", + Notification.TYPE_WARNING_MESSAGE + ); + return false; + } + + } + + + // Time + else if(field.isAnnotationPresent(AnnotationTime.class) ){ + // 2. Time format + + CustomDateField cdf = (CustomDateField) cstField; + + if("".equals("" + objValue)){ + objReady = null; + } + else{ + try{ + String sTime = "" + objValue; + String[] arrstrTime = sTime.split(":"); + + int iHours = Integer.parseInt(arrstrTime[0]); + int iMinutes = Integer.parseInt(arrstrTime[1]); + + if(iHours < 0 || iHours > 23 || iMinutes < 0 || iMinutes > 59){ + throw new Exception(); + } + + objReady = iHours * 60 + iMinutes; + } + catch (Exception e){ + this.getApplication() + .getMainWindow() + .showNotification( + "Поле '" + cstField.name + "' долнжо иметь формат " + cdf.format, + Notification.TYPE_WARNING_MESSAGE); + + return false; + } + } + } + + //Price + else if(field.isAnnotationPresent(AnnotationPrice.class) ){ + try{ + String sPrice = "" + objValue; + int iPrice = (int) (Float.parseFloat(sPrice) * 100); + + table.getItem(itemId).getItemProperty(cstField.name).setValue(new Float(iPrice) / 100); + + objReady = iPrice; + } + catch (Throwable e){ + this.getApplication() + .getMainWindow() + .showNotification( + "Поле '" + cstField.name + "' долнжо иметь формат XXXXX.YY", + Notification.TYPE_WARNING_MESSAGE + ); + + return false; + } + } + + + //Image + else if(field.isAnnotationPresent(AnnotationImage.class)){ + //We do not save images + continue; + } + else if(sField.contains("bool") || sField.contains("Boolean")){ + objReady = Boolean.parseBoolean(sValue); + } + else if(sField.contains("float") || sField.contains("Float")){ + objReady = Float.parseFloat(sValue); + } + else if(sField.contains("double") || sField.contains("Double")){ + objReady = Double.parseDouble(sValue); + } + else if(sField.contains("int") || sField.contains("Integer")){ + if(sValue == null || "".equals(sValue)){ + objReady = null; + } + else{ + objReady = Integer.parseInt(sValue); + } + } + + // Default + else{ + objReady = sValue; + } + + field.set(oldValueMongoObject, objReady); + } + } + } + catch (Throwable e){ + e.printStackTrace(); + this.getApplication().getMainWindow().showNotification( + "Ошибка сохранения поля " + cstField.name + " " + e.toString(), Notification.TYPE_WARNING_MESSAGE + ); + + return false; + } + } + + + + //Inject constraints + injectConstraints(oldValueMongoObject); + + + + try{ + MongoService.save((MAbstractEditableDataElement) oldValueMongoObject); + } + catch (MongoException.DuplicateKey e){ + String sMessage = e.getMessage(); + + + String[] arrstrName = sMessage.split("\\$"); + String sFieldName = arrstrName[1]; + arrstrName = sFieldName.split("_"); + sFieldName = arrstrName[0]; + + this.getApplication() + .getMainWindow() + .showNotification("Поле '" + descriptor.mapDBFields.get(sFieldName).name + " должно быть уникальным", + Notification.TYPE_WARNING_MESSAGE); + +// String[] arrstrValue = sMessage.split("\\\""); +// System.out.println(arrstrValue[1]); + + return false; + } + catch (Throwable e){ + this.getApplication() + .getMainWindow() + .showNotification("Ошибка сохранения объекта " + e.toString(), + Notification.TYPE_WARNING_MESSAGE); + return false; + } + + + for(CustomField cstField : descriptor.listFields){ + String sOldValue = "" + mapOldValuesInTable.get(cstField.name); + String sNewValue = "" + table.getItem(itemId).getItemProperty(cstField.name); + + if(sOldValue.equals(sNewValue)){ + //ok, no changes + } + else{ + MLog mLog = new MLog(); + mLog.ID = MongoService.getUniqueID(MLog.class); + mLog.created = System.currentTimeMillis(); + mLog.relatedClass = oldValueMongoObject.getClass().getName(); + mLog.object = ((MAbstractDataElement) oldValueMongoObject).humanReadable(InterfaceConstants.LANGS.valueOf("" + CURRENT_LANG.getValue())); + mLog.OID = (Integer) itemId; + mLog.name = cstField.name; + mLog.UID = application.UID; + mLog.screen = MENU_TITLE; + mLog.language = "" + CURRENT_LANG.getValue(); + mLog.old_value = sOldValue; + mLog.new_value = sNewValue; + + MongoService.ds.save(mLog); + } + } + } + + oldValueMongoObject = null; + + + for(IHookEdit hookEdit : listHookEdits) { + hookEdit.signal(this, (int) itemId); + } + + + return true; + } + + + + + + private void reloadTableAndSelectRow(Object itemId){ + int iSelectedRecordOffset = reload(); + table.focus(); + + if(itemId == null){ + } + else{ + table.setCurrentPageFirstItemIndex(iSelectedRecordOffset); + table.select(iSelectedRecordOffset); + } + } + + + + + + + + + public class LChangeFilter implements ValueChangeListener{ + private static final long serialVersionUID = -7259535457067468749L; + + public void valueChange(com.vaadin.data.Property.ValueChangeEvent event){ + reloadTableAndSelectRow(itemId); + } + } + + + + + + + + + + + + + + + private synchronized void adjustNavigation(){ + if(iCurrentPage <= 1 && iMaxPages <= 1){ + btFirst.setEnabled(false); + btPrev.setEnabled(false); + btNext.setEnabled(false); + btLast.setEnabled(false); + tfPage.setEnabled(false); + btGo.setEnabled(false); + + iCurrentPage = 1; + } + else{ + if(iCurrentPage < 1){ + iCurrentPage = 1; + } + + if(iCurrentPage == 1){ + btFirst.setEnabled(false); + btPrev.setEnabled(false); + } + + if(iCurrentPage >= iMaxPages){ + iCurrentPage = iMaxPages; + + btNext.setEnabled(false); + btLast.setEnabled(false); + } + + if(iCurrentPage < iMaxPages){ + btNext.setEnabled(true); + btLast.setEnabled(true); + } + + if(iCurrentPage > 1){ + btFirst.setEnabled(true); + btPrev.setEnabled(true); + } + + if(iCurrentPage == 1 && iMaxPages == 1){ + tfPage.setEnabled(false); + btGo.setEnabled(false); + } + else{ + tfPage.setEnabled(true); + btGo.setEnabled(true); + } + } + + tfPage.setValue(iCurrentPage); + tfTotal.setValue("" + iMaxPages); + } + + + + + + + + + + + + + + public class LLast implements ClickListener{ + private static final long serialVersionUID = -4360041638220736169L; + + @Override + public void buttonClick(ClickEvent event){ + iCurrentPage = iMaxPages; + + reload(); + } + } + + + + + + public class LNext implements ClickListener{ + private static final long serialVersionUID = 8808988354910728693L; + + @Override + public void buttonClick(ClickEvent event){ + if(iCurrentPage - 1 < iMaxPages){ + iCurrentPage++; + } + reload(); + } + } + + + + + + public class LChangePage implements ClickListener{ + private static final long serialVersionUID = -6604226086764024492L; + + @Override + public void buttonClick(ClickEvent event){ + try{ + iCurrentPage = Integer.parseInt("" + tfPage.getValue()); + } + catch (Throwable e){ + tfPage.setValue("" + iCurrentPage); + } + + reload(); + } + } + + + + + + public class LPrev implements ClickListener{ + private static final long serialVersionUID = -5452898555808735284L; + + @Override + public void buttonClick(ClickEvent event){ + if(iCurrentPage > 1){ + iCurrentPage--; + } + reload(); + } + } + + + + + + public class LFirst implements ClickListener{ + private static final long serialVersionUID = 2951488787976591188L; + + @Override + public void buttonClick(ClickEvent event){ + iCurrentPage = 1; + reload(); + } + + } + + + + /** + * This class enables or disables groups of fields by controller value + */ + public class LController implements ClickListener{ + private static final long serialVersionUID = -4316874685529219304L; + + private final FCustomController fController; + + public LController(FCustomController fController){ + this.fController = fController; + } + + public void buttonClick(ClickEvent event){ + for(String sTableFieldName : fController.listFields){ + boolean bController = Boolean.parseBoolean("" + event.getButton().getValue()); + mapEditModeComponents.get(sTableFieldName).setEnabled(bController); + + if(bController){ + } + else{ + mapEditModeComponents.get(sTableFieldName).setValue(""); + } + } + } + } + + + + + + + + + + + + + + + + + + public void addPanel(AbstractExtendedPanel panel, boolean bTop){ + listExtraPanels.add(panel); + panel.setStyleName(Runo.PANEL_LIGHT); + + if(bTop){ + panelTopAddons.addComponent(sizeX(5)); + panelTopAddons.addComponent(panel); + } + else{ + panelBottomAddons.addComponent(sizeX(5)); + panelBottomAddons.addComponent(panel); + } + + } + + + public void hookDelete(IHookDelete hookDelete){ + listHookDeletes.add(hookDelete); + } + public void hookAdd(IHookAdd hookAdd){ + listHookAdds.add(hookAdd); + } + public void hookEdit(IHookEdit hookEdit){ + listHookEdits.add(hookEdit); + } + public void hookUndelete(IHookUndelete hookUndelete){ + listHookUnDeletes.add(hookUndelete); + } + + + + + + + private void injectConstraints(Object mongoObject){ + //Inject constraints + for(Constraint.Criterion criterion : constraint.criteria){ + + java.lang.reflect.Field field; + try{ + field = classDB.getField(criterion.field); + field.set(mongoObject, criterion.value); + } + catch (Exception e){ + this.getApplication() + .getMainWindow() + .showNotification("Ошибка сохранения внешней константы " + + criterion.field + " ->" + criterion.value + + " " + e.toString(), + Notification.TYPE_ERROR_MESSAGE); + } + } + } + + + + + + + + public void ahoyIveChangedSomething(){ + for(AbstractExtendedPanel panel : listExtraPanels){ + panel.changeFocus(); + } + } + + + + public void grabSelectedIDes(){ + for(Object ID : table.getItemIds()){ + if(table.isSelected(ID)){ + setSelectedIDes.add((int) ID); + } + else{ + setSelectedIDes.remove((int) ID); + } + } + } +} diff --git a/kz_cafe_admin/src/kz/cafe/admin/panels/DBListSelectorMultiPanel.java b/kz_cafe_admin/src/kz/cafe/admin/panels/DBListSelectorMultiPanel.java new file mode 100644 index 0000000..ae72a92 --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/panels/DBListSelectorMultiPanel.java @@ -0,0 +1,84 @@ +package kz.cafe.admin.panels; + +import kz.cafe.admin.*; +import kz.cafe.db.*; +import kz.cafe.db.model.*; +import com.vaadin.ui.*; +import com.vaadin.ui.Button.ClickEvent; + +public class DBListSelectorMultiPanel extends AbstractPanel implements java.io.Serializable{ + private static final long serialVersionUID = -6150508871119562229L; + + + private final Button BT_OK = new Button("Выбрать"); + private final Button BT_CANCEL = new Button("Отменить"); + + public final DBListPanel panel; + + + public DBListSelectorMultiPanel(final AdminMain application, + AbstractTab abstractTab, + final Window window, + final MAbstractEditableDataElement mongoParentRecord, + final java.lang.reflect.Field field + ){ + + panel = abstractTab.build(); + this.addComponent(panel); + //super(application, classDB, descriptor, Dimension.get80(application), setMode); + + panel.table.setMultiSelect(true); + + HorizontalLayout layH = new HorizontalLayout(); + layH.setWidth("100%"); + + Label lbSpaceLeft = new Label(" "); + layH.addComponent(lbSpaceLeft); + + BT_OK.setWidth("200px"); + BT_OK.addListener(new Button.ClickListener(){ + private static final long serialVersionUID = 8435830261718609762L; + @Override + public void buttonClick(ClickEvent event){ + + panel.grabSelectedIDes(); + + try{ + field.set(mongoParentRecord, panel.setSelectedIDes); + } + catch (Throwable e){ + throw new Error(e); + } + + MongoService.save(mongoParentRecord); + + + + application.getMainWindow().removeWindow(window); + } + }); + layH.addComponent(BT_OK); + + layH.addComponent(sizeX(10)); + + BT_CANCEL.setWidth("200px"); + BT_CANCEL.addListener(new Button.ClickListener(){ + private static final long serialVersionUID = -8962051675512645746L; + @Override + public void buttonClick(ClickEvent event){ + application.getMainWindow().removeWindow(window); + } + }); + + layH.addComponent(BT_CANCEL); + Label lbSpaceRight = new Label(" "); + layH.addComponent(lbSpaceRight); + + layH.setExpandRatio(lbSpaceLeft, 20.0f); + layH.setExpandRatio(lbSpaceRight, 20.0f); + + + this.addComponent(layH); + this.addComponent(sizeY(5)); + } +} diff --git a/kz_cafe_admin/src/kz/cafe/admin/panels/DBSingle.java b/kz_cafe_admin/src/kz/cafe/admin/panels/DBSingle.java new file mode 100644 index 0000000..58d3029 --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/panels/DBSingle.java @@ -0,0 +1,328 @@ +package kz.cafe.admin.panels; + +import java.util.*; +import kz.cafe.admin.*; +import kz.cafe.admin.constants.*; +import kz.cafe.admin.constants.AccessConstants.*; +import kz.cafe.admin.panels.model.*; +import kz.cafe.constants.*; +import kz.cafe.db.*; +import kz.cafe.db.model.*; +import kz.cafe.db.model.anotations.*; +import com.vaadin.data.*; +import com.vaadin.data.Property.ValueChangeEvent; +import com.vaadin.ui.*; +import com.vaadin.ui.Window.*; + +public class DBSingle extends AbstractDBPanel implements java.io.Serializable{ + private static final long serialVersionUID = -3389296171233157104L; + + + private final AdminMain application; + private final int ID; + private final CustomDescriptor descriptor; +// private Dimension dim; +// private boolean isWriteable; + + + private Map mapTextFields = new HashMap(); + private Map mapDateFields = new HashMap(); + private Map mapImageFields = new HashMap(); + private Map mapBooleanFields = new HashMap(); + + + + @SuppressWarnings({ "rawtypes", "unchecked" }) + public DBSingle(AdminMain application, + Class classDB, + int ID, + CustomDescriptor descriptor, + Dimension dim, + Set setMode){ + this.application = application; + this.classDB = classDB; + this.ID = ID; + this.descriptor = descriptor; +// this.dim = dim; +// this.isWriteable = isWriteable; + + + //this.setWidth("" + dim.iWidth + "px"); + //sthis.setHeight("" + dim.iHeight + "px"); + + //this.setWidth("100%"); + //this.setHeight("100%"); + + this.setSizeUndefined(); + + + + //AbstractLayout panelLayout = (AbstractLayout) getContent(); + //panelLayout.setMargin(false); + + + GridLayout layGrid = new GridLayout(2, descriptor.listFields.size() + 1); + //layGrid.setSizeFull(); + + + layGrid.addComponent(new Label("Язык:")); + + CURRENT_LANG.addListener(new LLangChange()); + layGrid.addComponent(CURRENT_LANG); + + + for(CustomField cf : descriptor.listFields){ + java.lang.reflect.Field field = getField(cf.db); + + if(cf.visible){ + + String sClassName = field.getGenericType().toString().toLowerCase(); + + if(field.isAnnotationPresent(AnnotationDate.class)){ + layGrid.addComponent(new Label(cf.name + ":  ")); + + + CustomDateField cdf = (CustomDateField) cf; + + DateField df = new DateField(); + df.setDateFormat(cdf.format); + + if(setMode.contains(AccessConstants.EditMode.CHANGE) && cf.isEditable){ + } + else{ + df.setEnabled(false); + } + + mapDateFields.put(cf.name, df); + layGrid.addComponent(df); + } + else if(field.isAnnotationPresent(AnnotationImage.class)){ + layGrid.addComponent(new Label(cf.name + ":  ")); + + Label lbImage = new Label("", Label.CONTENT_XHTML); + + mapImageFields.put(cf.name, lbImage); + layGrid.addComponent(lbImage); + } + else if(field.isAnnotationPresent(AnnotationIncusiveList.class) ){ + Class classDescriptor = field.getAnnotation(AnnotationIncusiveList.class).foreign(); + + for(MAbstractDescriptor mAbstractDesriptor : + (List) MongoService.getList(classDescriptor)){ + + layGrid.addComponent(new Label(mAbstractDesriptor.name.get(InterfaceConstants.LANGS.RU) + ":  ")); + + CheckBox cb = new CheckBox(); + + if(setMode.contains(AccessConstants.EditMode.CHANGE) && cf.isEditable){ + } + else{ + cb.setEnabled(false); + } + + mapBooleanFields.put(cf.name + "." + mAbstractDesriptor.ID, cb); + layGrid.addComponent(cb); + } + } + else if(field.isAnnotationPresent(AnnotationPrice.class)){ + layGrid.addComponent(new Label(cf.name + ":  ")); + + TextField tf = new TextField(); + + if(setMode.contains(AccessConstants.EditMode.CHANGE) && cf.isEditable){ + } + else{ + tf.setEnabled(false); + } + + mapTextFields.put(cf.name, tf); + layGrid.addComponent(tf); + } + else if(sClassName.startsWith("bool")){ + layGrid.addComponent(new Label(cf.name + ":  ")); + + CheckBox cb = new CheckBox(); + + if(setMode.contains(AccessConstants.EditMode.CHANGE) && cf.isEditable){ + } + else{ + cb.setEnabled(false); + } + + mapBooleanFields.put(cf.name, cb); + layGrid.addComponent(cb); + } + else{ + layGrid.addComponent(new Label(cf.name + ":  ")); + + TextField tf = new TextField(); + + if(setMode.contains(AccessConstants.EditMode.CHANGE) && cf.isEditable){ + } + else{ + tf.setEnabled(false); + } + + mapTextFields.put(cf.name, tf); + layGrid.addComponent(tf); + } + } + } + + this.addComponent(layGrid); + + reload(); + } + + + + + @SuppressWarnings({ "unchecked", "rawtypes" }) + public void reload(){ + for(CustomField cf : descriptor.listFields){ + if(cf.visible){ + java.lang.reflect.Field field = getField(cf.db); + + Object objFieldValue; + try{ + objFieldValue = getFieldValue(field, MongoService.get(classDB, ID)); + } + catch (Throwable e1){ + application.getMainWindow().showNotification( + "Этот объект удален из базы", + Notification.TYPE_ERROR_MESSAGE + ); + return; + } + + + String sClassName = field.getGenericType().toString().toLowerCase(); + + //Date + if(field.isAnnotationPresent(AnnotationDate.class) ){ + + mapDateFields.get(cf.name).setValue(new Date((Long) objFieldValue)); + } + //Price + else if(field.isAnnotationPresent(AnnotationPrice.class)){ + mapTextFields.get(cf.name).setValue(formatPrice(objFieldValue)); + } + //Combo + else if(cf instanceof CustomFixedComboField){ + CustomFixedComboField cdf = (CustomFixedComboField) cf; + + if(field.isAnnotationPresent(AnnotationRelated.class) ){ + Class classForeign = + field.getAnnotation(AnnotationRelated.class).foreign(); + + localizeCombos(cdf, classForeign); + } + + try{ + Integer id = (Integer) objFieldValue; + mapTextFields.get(cf.name).setValue((cdf.get(id)).text); + } + catch (Throwable e){ + } + } + + + //Password + else if(cf instanceof CustomPassword){ + if(application.isAdmin){ + try{ + mapTextFields.get(cf.name).setValue(("" + objFieldValue)); + } + catch (Throwable e){ + } + } + else{ + mapTextFields.get(cf.name).setValue("*****"); + } + } + + //Image + else if(field.isAnnotationPresent(AnnotationImage.class) ){ + mapImageFields.get(cf.name).setValue(image2ClickableText("" + objFieldValue, 150)); + } + + + //Multilang + else if(field.isAnnotationPresent(AnnotationMultiLangString.class) ){ + Map map = + (Map) objFieldValue; + + String sValue = + map.get(InterfaceConstants.LANGS.valueOf("" + CURRENT_LANG.getValue())); + + if(sValue == null){ + sValue = ""; + } + + + mapTextFields.get(cf.name).setValue(sValue); + } + + else if(field.isAnnotationPresent(AnnotationIncusiveList.class) ){ + Class classDescriptor = field.getAnnotation(AnnotationIncusiveList.class).foreign(); + + Set set = (Set) objFieldValue; + + for(MAbstractDescriptor mAbstractDesriptor : + (List) MongoService.getList(classDescriptor)){ + + if(set.contains(mAbstractDesriptor.ID)){ + mapBooleanFields.get(cf.name + "." + mAbstractDesriptor.ID).setValue(true); + } + else{ + mapBooleanFields.get(cf.name + "." + mAbstractDesriptor.ID).setValue(false); + } + } + } +// else if(field.isAnnotationPresent(AnnotationPrice.class) ){ +// table.addContainerProperty(cstField.name, String.class, null); +// } +// else if(sClassName.contains("integer")){ +// table.addContainerProperty(cstField.name, Integer.class, null); +// } +// else if(sClassName.contains("long")){ +// table.addContainerProperty(cstField.name, Long.class, null); +// } + + else if(sClassName.startsWith("bool")){ + mapBooleanFields.get(cf.name).setValue(objFieldValue); + } + +// else if(sClassName.contains("float")){ +// table.addContainerProperty(cstField.name, Float.class, null); +// } +// else if(sClassName.contains("double")){ +// table.addContainerProperty(cstField.name, Double.class, null); +// } + else{ + try{ + mapTextFields.get(cf.name).setValue("" + objFieldValue); + } + catch (Throwable e){ + } + } + } + } + } + + + + + + private class LLangChange implements Property.ValueChangeListener{ + private static final long serialVersionUID = 8110274065919013532L; + + @Override + public void valueChange(ValueChangeEvent event){ + application.lang = (InterfaceConstants.LANGS) CURRENT_LANG.getValue(); + + reload(); + } + } + +} diff --git a/kz_cafe_admin/src/kz/cafe/admin/panels/Dimension.java b/kz_cafe_admin/src/kz/cafe/admin/panels/Dimension.java new file mode 100644 index 0000000..7b1c778 --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/panels/Dimension.java @@ -0,0 +1,50 @@ +package kz.cafe.admin.panels; + +import com.vaadin.*; + +public class Dimension implements java.io.Serializable{ + private static final long serialVersionUID = -8489880506316386655L; + + + public final int iWidth; + public final int iHeight; + + + public Dimension(int iWidth, int iHeight){ + this.iWidth = iWidth; + this.iHeight = iHeight; + } + + + + + + public static Dimension getFull(Application application){ + + int iHeight = 1280; + int iWidth = 1024; + + iHeight = (int) application.getMainWindow().getHeight(); + iWidth = (int) application.getMainWindow().getWidth(); + + return new Dimension(iWidth, iHeight); + } + + + + + + public static Dimension get80(Application application){ + Dimension dim = getFull(application); + return new Dimension(dim.iWidth * 8 / 10, dim.iHeight * 8 / 10); + } + + + + + + public static Dimension get50(Application application){ + Dimension dim = getFull(application); + return new Dimension(dim.iWidth / 2, dim.iHeight / 2); + } +} diff --git a/kz_cafe_admin/src/kz/cafe/admin/panels/Order.java b/kz_cafe_admin/src/kz/cafe/admin/panels/Order.java new file mode 100644 index 0000000..58f4874 --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/panels/Order.java @@ -0,0 +1,53 @@ +package kz.cafe.admin.panels; + + +public class Order implements java.io.Serializable{ + private static final long serialVersionUID = -1218073429835955996L; + + public static final short LESS = 0; + public static final short CREATER = 1; + + public final short type; + public final String field; + public final String name; + + + + + + public Order(short type, String field, String name){ + this.type = type; + this.field = field; + this.name = name; + } + + + + + + public String toMongo(){ + if(type == CREATER){ + return field; + } + else{ + return "-" + field; + } + } + + + + + + @Override + public String toString(){ + StringBuilder builder = new StringBuilder(); + builder.append("Order [type="); + builder.append(type); + builder.append(", field="); + builder.append(field); + builder.append(", name="); + builder.append(name); + builder.append("]"); + return builder.toString(); + } +} diff --git a/kz_cafe_admin/src/kz/cafe/admin/panels/components/ExtendedTable.java b/kz_cafe_admin/src/kz/cafe/admin/panels/components/ExtendedTable.java new file mode 100644 index 0000000..4aac27a --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/panels/components/ExtendedTable.java @@ -0,0 +1,52 @@ +package kz.cafe.admin.panels.components; + +import java.text.*; +import java.util.*; +import kz.cafe.admin.panels.model.*; +import com.vaadin.data.*; +import com.vaadin.ui.*; + + +public class ExtendedTable extends Table{ + private static final long serialVersionUID = -2040290287589688584L; + + + + private CustomDescriptor descriptor; + + + public ExtendedTable(CustomDescriptor descriptor){ + this.descriptor = descriptor; + } + + + + + + + + @Override + protected String formatPropertyValue(Object rowId, Object colId, Property property){ + Object v = property.getValue(); + if(v instanceof Date){ + Date dateValue = (Date) v; + CustomDateField cstDateField = (CustomDateField) descriptor.mapNames.get("" + colId); + + return new SimpleDateFormat(cstDateField.format).format(dateValue); + } + + else if(property.getType() == Boolean.class){ + if(property.getValue() == null){ + return ""; + } + else if((Boolean) property.getValue()){ + return "да"; + } + else{ + return ""; + } + } + + return super.formatPropertyValue(rowId, colId, property); + } +}; diff --git a/kz_cafe_admin/src/kz/cafe/admin/panels/components/MyCheckBox.java b/kz_cafe_admin/src/kz/cafe/admin/panels/components/MyCheckBox.java new file mode 100644 index 0000000..0aab315 --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/panels/components/MyCheckBox.java @@ -0,0 +1,12 @@ +package kz.cafe.admin.panels.components; + +import com.vaadin.ui.*; + +public class MyCheckBox extends CheckBox{ + + private static final long serialVersionUID = 863776966569407200L; + + public void setValue(){ + } + +} diff --git a/kz_cafe_admin/src/kz/cafe/admin/panels/components/RelationButton.java b/kz_cafe_admin/src/kz/cafe/admin/panels/components/RelationButton.java new file mode 100644 index 0000000..1d96eb6 --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/panels/components/RelationButton.java @@ -0,0 +1,91 @@ +package kz.cafe.admin.panels.components; + +import kz.cafe.admin.*; +import kz.cafe.admin.panels.*; +import com.vaadin.ui.*; + + +@SuppressWarnings({ "unchecked" }) +public class RelationButton extends Button implements java.io.Serializable{ + private static final long serialVersionUID = 1593403290856686152L; + + + private final AdminMain adminMain; + private final int ID; + private final AbstractTab abstractTab; + private final String sName; + + + @SuppressWarnings("unused") + private String sValue = null; + + + + + private Window window; + + + public RelationButton(AdminMain adminMain, + int ID, + AbstractTab abstractTab, + String sName){ + this.adminMain = adminMain; + this.ID = ID; + this.abstractTab = abstractTab; + this.sName = sName; + + this.addListener(new LClick()); + } + + + + + + + protected void setInternalValue(Object newValue){ + setCaption("" + newValue); + this.sValue = "" + newValue; + } + + + + + + + public Boolean getValue(){ + return false; + } + + + + + + + + private class LClick implements Button.ClickListener{ + private static final long serialVersionUID = 202894149232905560L; + + + + public void buttonClick(ClickEvent event){ +// AbstractDBPanel panelDefault = new DBSingle(adminMain, +// classDB, +// ID, +// customDescriptor, +// Dimension.get05(adminMain), +// false +// ); + + + AbstractDBPanel panelDefault = abstractTab.build(ID); + + + window = new Window(sName); + window.setContent(panelDefault); + window.setSizeUndefined(); + window.setModal(true); + window.center(); + adminMain.getMainWindow().addWindow(window); + } + } +} diff --git a/kz_cafe_admin/src/kz/cafe/admin/panels/model/AbstractComboField.java b/kz_cafe_admin/src/kz/cafe/admin/panels/model/AbstractComboField.java new file mode 100644 index 0000000..044d83f --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/panels/model/AbstractComboField.java @@ -0,0 +1,126 @@ +package kz.cafe.admin.panels.model; + +import java.util.*; +import kz.cafe.constants.*; + +public class AbstractComboField extends CustomField implements java.io.Serializable{ + + private static final long serialVersionUID = -6530651778025057732L; + + private final List listElements = new ArrayList(); + private final Map mapElementNumbers = new HashMap(); + private final Map mapElementText = new HashMap(); + + + public enum TYPE{TEXT, IMAGE} + + public TYPE type = TYPE.TEXT; + + public InterfaceConstants.LANGS lang; + + + public void clear(){ + listElements.clear(); + mapElementNumbers.clear(); + mapElementText.clear(); + } + + + + public void add(Element element){ + if(mapElementNumbers.containsKey(element.id)){ + throw new Error("Double id=" + element.id); + } + + listElements.add(element); + mapElementNumbers.put(element.id, element); + mapElementText.put(element.text, element); + + Collections.sort(listElements); + } + + + + + public List getElements(){ + return new ArrayList(listElements); + } + + + public Element get(int id){ + return mapElementNumbers.get(id); + } + public Element get(String text){ + return mapElementText.get(text); + } + + + + + + + public static class Element implements Comparable, java.io.Serializable{ + private static final long serialVersionUID = 2848022751799860900L; + + + public final int id; + public final String text; + public final String image; + + + public Element(int id, String text){ + this.id = id; + this.text = text; + this.image = null; + } + + + public Element(int id, String text, String image){ + this.id = id; + this.text = text; + this.image = image; + } + + + + + + + @Override + public int hashCode(){ + final int prime = 31; + int result = 1; + result = prime * result + id; + return result; + } + + + + + + + @Override + public boolean equals(Object obj){ + if(this == obj) + return true; + if(obj == null) + return false; + if(getClass() != obj.getClass()) + return false; + Element other = (Element) obj; + if(id != other.id) + return false; + return true; + } + + + + + + + @Override + public int compareTo(Object obj){ + return id - ((Element) obj).id; + } + } +} diff --git a/kz_cafe_admin/src/kz/cafe/admin/panels/model/CustomDatabaseComboField.java b/kz_cafe_admin/src/kz/cafe/admin/panels/model/CustomDatabaseComboField.java new file mode 100644 index 0000000..7bcca91 --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/panels/model/CustomDatabaseComboField.java @@ -0,0 +1,10 @@ +package kz.cafe.admin.panels.model; + +import kz.cafe.db.*; + + +public class CustomDatabaseComboField extends AbstractComboField implements java.io.Serializable{ + private static final long serialVersionUID = -2409347520757125720L; + + public Constraint constraint = new Constraint();; +} diff --git a/kz_cafe_admin/src/kz/cafe/admin/panels/model/CustomDateField.java b/kz_cafe_admin/src/kz/cafe/admin/panels/model/CustomDateField.java new file mode 100644 index 0000000..c95e3df --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/panels/model/CustomDateField.java @@ -0,0 +1,9 @@ +package kz.cafe.admin.panels.model; + +public class CustomDateField extends CustomField implements java.io.Serializable{ + private static final long serialVersionUID = -5794167208447538604L; + + // ' ' = non visible utf8 character + + public String format = "dd.MM.yyyy'  'HH:mm"; +} diff --git a/kz_cafe_admin/src/kz/cafe/admin/panels/model/CustomDescriptor.java b/kz_cafe_admin/src/kz/cafe/admin/panels/model/CustomDescriptor.java new file mode 100644 index 0000000..7758576 --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/panels/model/CustomDescriptor.java @@ -0,0 +1,57 @@ +package kz.cafe.admin.panels.model; + +import java.util.*; + +public final class CustomDescriptor implements java.io.Serializable{ + + private static final long serialVersionUID = -5815322192169028956L; + + + + private final List _listFields = new ArrayList(); + private final Map _mapDBFields = new HashMap(); + private final Map _mapNames = new HashMap(); + + public final List listFields = Collections.unmodifiableList(_listFields); + public final Map mapDBFields = Collections.unmodifiableMap(_mapDBFields); + public final Map mapNames = Collections.unmodifiableMap(_mapNames); + + public final LinkedHashMap> mapSearchOrder = new LinkedHashMap>(); + + + public void addField(CustomField cstField){ + if(_mapDBFields.containsKey(cstField.db) || _mapNames.containsKey(cstField.name)){ + throw new Error("duplicate key '" + cstField.db + "' '" + cstField.name + "'"); + } + + _mapDBFields.put(cstField.db, cstField); + _mapNames.put(cstField.name, cstField); + _listFields.add(cstField); + + List list = mapSearchOrder.get(cstField.search.row); + + if(list == null){ + list = new ArrayList(); + } + + list.add(cstField); + + + mapSearchOrder.put(cstField.search.row, list); + } + + + + + public void removeFieldByName(String sName){ + CustomField cstField = _mapNames.get(sName); + + _mapDBFields.remove(cstField.db); + _mapNames.remove(cstField.name); + _listFields.remove(cstField); + mapDBFields.remove(cstField.db); + mapNames.remove(cstField.name); + listFields.remove(cstField); + } + +} diff --git a/kz_cafe_admin/src/kz/cafe/admin/panels/model/CustomField.java b/kz_cafe_admin/src/kz/cafe/admin/panels/model/CustomField.java new file mode 100644 index 0000000..ffd428a --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/panels/model/CustomField.java @@ -0,0 +1,103 @@ +package kz.cafe.admin.panels.model; + +public class CustomField implements java.io.Serializable{ + private static final long serialVersionUID = 653472427285426925L; + + public String name; + public String db; + + public boolean visible; + public boolean isEditable; + + + public boolean isSortable; + public boolean isMust; + + + public enum Alignment{LEFT, CENTER, RIGHT}; + + + + public static class Style implements java.io.Serializable{ + + private static final long serialVersionUID = 2852972181940574257L; + public int width; + public int height; + public boolean expandable = true; + public Alignment alignment = Alignment.LEFT; + } + public final Style style = new Style(); + + + + + public static class Search implements java.io.Serializable{ + private static final long serialVersionUID = 1347370899146848147L; + + public enum SEARCH_MODES{NONE, + INTEGER, + INTEGER_RANGE, + STRING, LOCALIZED_STRING, + BOOLEAN, + BOOLEAN_ONLY_TRUE, + DATE, + DATE_RANGE, + TIME_RANGE}; + + public SEARCH_MODES mode = SEARCH_MODES.NONE; + + + public int row = 0; + public int cell; + } + public final Search search = new Search(); + + + + + + + + @Override + public int hashCode(){ + final int prime = 31; + int result = 1; + result = prime * result + ((db == null) ? 0 : db.hashCode()); + return result; + } + + + + + + + + @Override + public boolean equals(Object obj){ + if(this == obj) + return true; + if(obj == null) + return false; + if(getClass() != obj.getClass()) + return false; + CustomField other = (CustomField) obj; + if(db == null){ + if(other.db != null) + return false; + } + else if(!db.equals(other.db)) + return false; + return true; + } + + + + + + + + @Override + public String toString(){ + return "CustomField [name=" + name + ", db=" + db + ", getClass()=" + getClass() + "]"; + } +} diff --git a/kz_cafe_admin/src/kz/cafe/admin/panels/model/CustomFixedComboField.java b/kz_cafe_admin/src/kz/cafe/admin/panels/model/CustomFixedComboField.java new file mode 100644 index 0000000..a69425e --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/panels/model/CustomFixedComboField.java @@ -0,0 +1,7 @@ +package kz.cafe.admin.panels.model; + + +public class CustomFixedComboField extends AbstractComboField implements java.io.Serializable{ + + private static final long serialVersionUID = 1381102120838710939L; +} diff --git a/kz_cafe_admin/src/kz/cafe/admin/panels/model/CustomImageField.java b/kz_cafe_admin/src/kz/cafe/admin/panels/model/CustomImageField.java new file mode 100644 index 0000000..9daa53e --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/panels/model/CustomImageField.java @@ -0,0 +1,9 @@ +package kz.cafe.admin.panels.model; + + + +public class CustomImageField extends CustomField implements java.io.Serializable{ + private static final long serialVersionUID = -5794167208447538604L; + + public boolean isImageInTable = true; +} diff --git a/kz_cafe_admin/src/kz/cafe/admin/panels/model/CustomMultiCombo.java b/kz_cafe_admin/src/kz/cafe/admin/panels/model/CustomMultiCombo.java new file mode 100644 index 0000000..13974e4 --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/panels/model/CustomMultiCombo.java @@ -0,0 +1,18 @@ +package kz.cafe.admin.panels.model; + + +public class CustomMultiCombo extends AbstractComboField implements java.io.Serializable{ + private static final long serialVersionUID = 5187985251623166339L; + + + public enum TYPE{TABLE, COMBO}; + + public final TYPE type; + + + public CustomMultiCombo(String name, String db, TYPE type){ + super.name = name; + super.db = db; + this.type = type; + } +} diff --git a/kz_cafe_admin/src/kz/cafe/admin/panels/model/CustomPassword.java b/kz_cafe_admin/src/kz/cafe/admin/panels/model/CustomPassword.java new file mode 100644 index 0000000..05a71cc --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/panels/model/CustomPassword.java @@ -0,0 +1,5 @@ +package kz.cafe.admin.panels.model; + +public class CustomPassword extends CustomField implements java.io.Serializable{ + private static final long serialVersionUID = 3182936311853463121L; +} diff --git a/kz_cafe_admin/src/kz/cafe/admin/panels/model/CustomRelationField.java b/kz_cafe_admin/src/kz/cafe/admin/panels/model/CustomRelationField.java new file mode 100644 index 0000000..58dc9df --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/panels/model/CustomRelationField.java @@ -0,0 +1,20 @@ +package kz.cafe.admin.panels.model; + + +@SuppressWarnings("rawtypes") +public class CustomRelationField extends CustomField implements java.io.Serializable{ + + private static final long serialVersionUID = 2182969492351416462L; + + + + public final String relationField; + public final Class relatedClass; + + + public CustomRelationField(Class relatedClass, + String sRelationField){ + this.relatedClass = relatedClass; + this.relationField = sRelationField; + } +} diff --git a/kz_cafe_admin/src/kz/cafe/admin/panels/model/CustomRelationFieldFlexable.java b/kz_cafe_admin/src/kz/cafe/admin/panels/model/CustomRelationFieldFlexable.java new file mode 100644 index 0000000..872e5ba --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/panels/model/CustomRelationFieldFlexable.java @@ -0,0 +1,19 @@ +package kz.cafe.admin.panels.model; + + +public class CustomRelationFieldFlexable extends CustomField implements java.io.Serializable{ + + private static final long serialVersionUID = 2182969492351416462L; + + + + public final String relationField; + public final String sRelatedClassField; + + + public CustomRelationFieldFlexable(String sRelatedClassField, + String sRelationField){ + this.sRelatedClassField = sRelatedClassField; + this.relationField = sRelationField; + } +} diff --git a/kz_cafe_admin/src/kz/cafe/admin/panels/model/FCustomController.java b/kz_cafe_admin/src/kz/cafe/admin/panels/model/FCustomController.java new file mode 100644 index 0000000..d37ab22 --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/panels/model/FCustomController.java @@ -0,0 +1,10 @@ +package kz.cafe.admin.panels.model; + +import java.util.*; + +public class FCustomController extends CustomField implements java.io.Serializable{ + private static final long serialVersionUID = -2482260124360907263L; + + + public final List listFields = new ArrayList(); +} diff --git a/kz_cafe_admin/src/kz/cafe/admin/widgetset/Kz_cafe_adminWidgetset.gwt.xml b/kz_cafe_admin/src/kz/cafe/admin/widgetset/Kz_cafe_adminWidgetset.gwt.xml new file mode 100644 index 0000000..dbcda05 --- /dev/null +++ b/kz_cafe_admin/src/kz/cafe/admin/widgetset/Kz_cafe_adminWidgetset.gwt.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + diff --git a/kz_cafe_client/.classpath b/kz_cafe_client/.classpath new file mode 100644 index 0000000..1dd7040 --- /dev/null +++ b/kz_cafe_client/.classpath @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/kz_cafe_client/.project b/kz_cafe_client/.project new file mode 100644 index 0000000..5dec4e0 --- /dev/null +++ b/kz_cafe_client/.project @@ -0,0 +1,37 @@ + + + kz_cafe_client + + + kz_cafe_core + + + + org.eclipse.wst.jsdt.core.javascriptValidator + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.wst.common.project.facet.core.builder + + + + + org.eclipse.wst.validation.validationbuilder + + + + + + org.eclipse.jem.workbench.JavaEMFNature + org.eclipse.wst.common.modulecore.ModuleCoreNature + org.eclipse.wst.common.project.facet.core.nature + org.eclipse.jdt.core.javanature + org.eclipse.wst.jsdt.core.jsNature + + diff --git a/kz_cafe_client/.settings/.jsdtscope b/kz_cafe_client/.settings/.jsdtscope new file mode 100644 index 0000000..887f573 --- /dev/null +++ b/kz_cafe_client/.settings/.jsdtscope @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/kz_cafe_client/.settings/org.eclipse.jdt.core.prefs b/kz_cafe_client/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..838bd9d --- /dev/null +++ b/kz_cafe_client/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,11 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.7 diff --git a/kz_cafe_client/.settings/org.eclipse.wst.common.component b/kz_cafe_client/.settings/org.eclipse.wst.common.component new file mode 100644 index 0000000..26b8d4e --- /dev/null +++ b/kz_cafe_client/.settings/org.eclipse.wst.common.component @@ -0,0 +1,59 @@ + + + + + + uses + + + uses + + + uses + + + uses + + + uses + + + uses + + + uses + + + uses + + + uses + + + uses + + + uses + + + uses + + + uses + + + uses + + + uses + + + uses + + + uses + + + + + diff --git a/kz_cafe_client/.settings/org.eclipse.wst.common.project.facet.core.xml b/kz_cafe_client/.settings/org.eclipse.wst.common.project.facet.core.xml new file mode 100644 index 0000000..3e16155 --- /dev/null +++ b/kz_cafe_client/.settings/org.eclipse.wst.common.project.facet.core.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/kz_cafe_client/.settings/org.eclipse.wst.jsdt.ui.superType.container b/kz_cafe_client/.settings/org.eclipse.wst.jsdt.ui.superType.container new file mode 100644 index 0000000..3bd5d0a --- /dev/null +++ b/kz_cafe_client/.settings/org.eclipse.wst.jsdt.ui.superType.container @@ -0,0 +1 @@ +org.eclipse.wst.jsdt.launching.baseBrowserLibrary \ No newline at end of file diff --git a/kz_cafe_client/.settings/org.eclipse.wst.jsdt.ui.superType.name b/kz_cafe_client/.settings/org.eclipse.wst.jsdt.ui.superType.name new file mode 100644 index 0000000..05bd71b --- /dev/null +++ b/kz_cafe_client/.settings/org.eclipse.wst.jsdt.ui.superType.name @@ -0,0 +1 @@ +Window \ No newline at end of file diff --git a/kz_cafe_client/WebContent/META-INF/MANIFEST.MF b/kz_cafe_client/WebContent/META-INF/MANIFEST.MF new file mode 100644 index 0000000..5e94951 --- /dev/null +++ b/kz_cafe_client/WebContent/META-INF/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Class-Path: + diff --git a/kz_cafe_client/WebContent/WEB-INF/lib/asm-3.1.jar b/kz_cafe_client/WebContent/WEB-INF/lib/asm-3.1.jar new file mode 100644 index 0000000..8217cae Binary files /dev/null and b/kz_cafe_client/WebContent/WEB-INF/lib/asm-3.1.jar differ diff --git a/kz_cafe_client/WebContent/WEB-INF/lib/commons-collections-3.1.jar b/kz_cafe_client/WebContent/WEB-INF/lib/commons-collections-3.1.jar new file mode 100644 index 0000000..41e230f Binary files /dev/null and b/kz_cafe_client/WebContent/WEB-INF/lib/commons-collections-3.1.jar differ diff --git a/kz_cafe_client/WebContent/WEB-INF/lib/commons-fileupload-1.2.2.jar b/kz_cafe_client/WebContent/WEB-INF/lib/commons-fileupload-1.2.2.jar new file mode 100644 index 0000000..131f192 Binary files /dev/null and b/kz_cafe_client/WebContent/WEB-INF/lib/commons-fileupload-1.2.2.jar differ diff --git a/kz_cafe_client/WebContent/WEB-INF/lib/commons-io-2.0.1.jar b/kz_cafe_client/WebContent/WEB-INF/lib/commons-io-2.0.1.jar new file mode 100644 index 0000000..5b64b7d Binary files /dev/null and b/kz_cafe_client/WebContent/WEB-INF/lib/commons-io-2.0.1.jar differ diff --git a/kz_cafe_client/WebContent/WEB-INF/lib/commons-logging.jar b/kz_cafe_client/WebContent/WEB-INF/lib/commons-logging.jar new file mode 100644 index 0000000..8758a96 Binary files /dev/null and b/kz_cafe_client/WebContent/WEB-INF/lib/commons-logging.jar differ diff --git a/kz_cafe_client/WebContent/WEB-INF/lib/jersey-client-1.5.jar b/kz_cafe_client/WebContent/WEB-INF/lib/jersey-client-1.5.jar new file mode 100644 index 0000000..62f790f Binary files /dev/null and b/kz_cafe_client/WebContent/WEB-INF/lib/jersey-client-1.5.jar differ diff --git a/kz_cafe_client/WebContent/WEB-INF/lib/jersey-core-1.5.jar b/kz_cafe_client/WebContent/WEB-INF/lib/jersey-core-1.5.jar new file mode 100644 index 0000000..92b3846 Binary files /dev/null and b/kz_cafe_client/WebContent/WEB-INF/lib/jersey-core-1.5.jar differ diff --git a/kz_cafe_client/WebContent/WEB-INF/lib/jersey-json-1.5.jar b/kz_cafe_client/WebContent/WEB-INF/lib/jersey-json-1.5.jar new file mode 100644 index 0000000..01d8c83 Binary files /dev/null and b/kz_cafe_client/WebContent/WEB-INF/lib/jersey-json-1.5.jar differ diff --git a/kz_cafe_client/WebContent/WEB-INF/lib/jersey-server-1.5.jar b/kz_cafe_client/WebContent/WEB-INF/lib/jersey-server-1.5.jar new file mode 100644 index 0000000..a29d740 Binary files /dev/null and b/kz_cafe_client/WebContent/WEB-INF/lib/jersey-server-1.5.jar differ diff --git a/kz_cafe_client/WebContent/WEB-INF/lib/jsr311-api-1.1.1.jar b/kz_cafe_client/WebContent/WEB-INF/lib/jsr311-api-1.1.1.jar new file mode 100644 index 0000000..ec8bc81 Binary files /dev/null and b/kz_cafe_client/WebContent/WEB-INF/lib/jsr311-api-1.1.1.jar differ diff --git a/kz_cafe_client/WebContent/WEB-INF/lib/log4j.jar b/kz_cafe_client/WebContent/WEB-INF/lib/log4j.jar new file mode 100644 index 0000000..c930a6a Binary files /dev/null and b/kz_cafe_client/WebContent/WEB-INF/lib/log4j.jar differ diff --git a/kz_cafe_client/WebContent/WEB-INF/lib/mailapi.jar b/kz_cafe_client/WebContent/WEB-INF/lib/mailapi.jar new file mode 100644 index 0000000..fc37e89 Binary files /dev/null and b/kz_cafe_client/WebContent/WEB-INF/lib/mailapi.jar differ diff --git a/kz_cafe_client/WebContent/WEB-INF/lib/mongo-2.6.3.jar b/kz_cafe_client/WebContent/WEB-INF/lib/mongo-2.6.3.jar new file mode 100644 index 0000000..9d54d54 Binary files /dev/null and b/kz_cafe_client/WebContent/WEB-INF/lib/mongo-2.6.3.jar differ diff --git a/kz_cafe_client/WebContent/WEB-INF/lib/morphia-1.00-SNAPSHOT.jar b/kz_cafe_client/WebContent/WEB-INF/lib/morphia-1.00-SNAPSHOT.jar new file mode 100644 index 0000000..e55b615 Binary files /dev/null and b/kz_cafe_client/WebContent/WEB-INF/lib/morphia-1.00-SNAPSHOT.jar differ diff --git a/kz_cafe_client/WebContent/WEB-INF/lib/sqlitejdbc-v056.jar b/kz_cafe_client/WebContent/WEB-INF/lib/sqlitejdbc-v056.jar new file mode 100644 index 0000000..f95d90e Binary files /dev/null and b/kz_cafe_client/WebContent/WEB-INF/lib/sqlitejdbc-v056.jar differ diff --git a/kz_cafe_client/WebContent/WEB-INF/web.xml b/kz_cafe_client/WebContent/WEB-INF/web.xml new file mode 100644 index 0000000..ecb37bd --- /dev/null +++ b/kz_cafe_client/WebContent/WEB-INF/web.xml @@ -0,0 +1,32 @@ + + + + + ServletAdaptor + com.sun.jersey.spi.container.servlet.ServletContainer + + com.sun.jersey.config.property.packages + kz.cafe.client + + + com.sun.jersey.config.property.MediaTypeMappings + json : application/json + + + com.sun.jersey.spi.container.ContainerResponseFilters + com.sun.jersey.api.container.filter.GZIPContentEncodingFilter + + + + ServletAdaptor + /* + + + index.html + index.htm + index.jsp + default.html + default.htm + default.jsp + + \ No newline at end of file diff --git a/kz_cafe_client/build/classes/kz/cafe/client/FEAbstractService.class b/kz_cafe_client/build/classes/kz/cafe/client/FEAbstractService.class new file mode 100644 index 0000000..0e9ff22 Binary files /dev/null and b/kz_cafe_client/build/classes/kz/cafe/client/FEAbstractService.class differ diff --git a/kz_cafe_client/build/classes/kz/cafe/client/JRAbstractRequest.class b/kz_cafe_client/build/classes/kz/cafe/client/JRAbstractRequest.class new file mode 100644 index 0000000..5e4d9a5 Binary files /dev/null and b/kz_cafe_client/build/classes/kz/cafe/client/JRAbstractRequest.class differ diff --git a/kz_cafe_client/build/classes/kz/cafe/client/JRAbstractResponse.class b/kz_cafe_client/build/classes/kz/cafe/client/JRAbstractResponse.class new file mode 100644 index 0000000..20723cb Binary files /dev/null and b/kz_cafe_client/build/classes/kz/cafe/client/JRAbstractResponse.class differ diff --git a/kz_cafe_client/build/classes/kz/cafe/client/JREmptyResponse.class b/kz_cafe_client/build/classes/kz/cafe/client/JREmptyResponse.class new file mode 100644 index 0000000..5531726 Binary files /dev/null and b/kz_cafe_client/build/classes/kz/cafe/client/JREmptyResponse.class differ diff --git a/kz_cafe_client/build/classes/kz/cafe/client/ServiceRequestModel.class b/kz_cafe_client/build/classes/kz/cafe/client/ServiceRequestModel.class new file mode 100644 index 0000000..e9cdb9a Binary files /dev/null and b/kz_cafe_client/build/classes/kz/cafe/client/ServiceRequestModel.class differ diff --git a/kz_cafe_client/build/classes/kz/cafe/client/rest/FEAdmin.class b/kz_cafe_client/build/classes/kz/cafe/client/rest/FEAdmin.class new file mode 100644 index 0000000..db86d24 Binary files /dev/null and b/kz_cafe_client/build/classes/kz/cafe/client/rest/FEAdmin.class differ diff --git a/kz_cafe_client/build/classes/kz/cafe/client/rest/FECafe$VOrderItem.class b/kz_cafe_client/build/classes/kz/cafe/client/rest/FECafe$VOrderItem.class new file mode 100644 index 0000000..34a5f82 Binary files /dev/null and b/kz_cafe_client/build/classes/kz/cafe/client/rest/FECafe$VOrderItem.class differ diff --git a/kz_cafe_client/build/classes/kz/cafe/client/rest/FECafe.class b/kz_cafe_client/build/classes/kz/cafe/client/rest/FECafe.class new file mode 100644 index 0000000..eb72609 Binary files /dev/null and b/kz_cafe_client/build/classes/kz/cafe/client/rest/FECafe.class differ diff --git a/kz_cafe_client/build/classes/kz/cafe/client/rest/FECity.class b/kz_cafe_client/build/classes/kz/cafe/client/rest/FECity.class new file mode 100644 index 0000000..6bea148 Binary files /dev/null and b/kz_cafe_client/build/classes/kz/cafe/client/rest/FECity.class differ diff --git a/kz_cafe_client/build/classes/kz/cafe/client/rest/FEFeedback.class b/kz_cafe_client/build/classes/kz/cafe/client/rest/FEFeedback.class new file mode 100644 index 0000000..0fd906d Binary files /dev/null and b/kz_cafe_client/build/classes/kz/cafe/client/rest/FEFeedback.class differ diff --git a/kz_cafe_client/build/classes/kz/cafe/client/rest/FEImages.class b/kz_cafe_client/build/classes/kz/cafe/client/rest/FEImages.class new file mode 100644 index 0000000..920b7be Binary files /dev/null and b/kz_cafe_client/build/classes/kz/cafe/client/rest/FEImages.class differ diff --git a/kz_cafe_client/build/classes/kz/cafe/client/rest/FEMessage.class b/kz_cafe_client/build/classes/kz/cafe/client/rest/FEMessage.class new file mode 100644 index 0000000..df8a49e Binary files /dev/null and b/kz_cafe_client/build/classes/kz/cafe/client/rest/FEMessage.class differ diff --git a/kz_cafe_client/build/classes/kz/cafe/client/rest/FENews.class b/kz_cafe_client/build/classes/kz/cafe/client/rest/FENews.class new file mode 100644 index 0000000..c473056 Binary files /dev/null and b/kz_cafe_client/build/classes/kz/cafe/client/rest/FENews.class differ diff --git a/kz_cafe_client/build/classes/kz/cafe/client/rest/FEPhone.class b/kz_cafe_client/build/classes/kz/cafe/client/rest/FEPhone.class new file mode 100644 index 0000000..a35f826 Binary files /dev/null and b/kz_cafe_client/build/classes/kz/cafe/client/rest/FEPhone.class differ diff --git a/kz_cafe_client/build/classes/kz/cafe/client/rest/FESale.class b/kz_cafe_client/build/classes/kz/cafe/client/rest/FESale.class new file mode 100644 index 0000000..f4ab69c Binary files /dev/null and b/kz_cafe_client/build/classes/kz/cafe/client/rest/FESale.class differ diff --git a/kz_cafe_client/build/classes/kz/cafe/client/rest/FESystem.class b/kz_cafe_client/build/classes/kz/cafe/client/rest/FESystem.class new file mode 100644 index 0000000..f082369 Binary files /dev/null and b/kz_cafe_client/build/classes/kz/cafe/client/rest/FESystem.class differ diff --git a/kz_cafe_client/build/classes/kz/cafe/client/rest/FEUser$1.class b/kz_cafe_client/build/classes/kz/cafe/client/rest/FEUser$1.class new file mode 100644 index 0000000..8f6002e Binary files /dev/null and b/kz_cafe_client/build/classes/kz/cafe/client/rest/FEUser$1.class differ diff --git a/kz_cafe_client/build/classes/kz/cafe/client/rest/FEUser.class b/kz_cafe_client/build/classes/kz/cafe/client/rest/FEUser.class new file mode 100644 index 0000000..92de268 Binary files /dev/null and b/kz_cafe_client/build/classes/kz/cafe/client/rest/FEUser.class differ diff --git a/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JMAbstractDataElement.class b/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JMAbstractDataElement.class new file mode 100644 index 0000000..f8a1af7 Binary files /dev/null and b/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JMAbstractDataElement.class differ diff --git a/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JMAbstractDescriptor.class b/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JMAbstractDescriptor.class new file mode 100644 index 0000000..6f40e0f Binary files /dev/null and b/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JMAbstractDescriptor.class differ diff --git a/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRAbstractDeleteableResponse.class b/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRAbstractDeleteableResponse.class new file mode 100644 index 0000000..201133f Binary files /dev/null and b/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRAbstractDeleteableResponse.class differ diff --git a/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRCafeImageListResponse$JMItem.class b/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRCafeImageListResponse$JMItem.class new file mode 100644 index 0000000..3601ab4 Binary files /dev/null and b/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRCafeImageListResponse$JMItem.class differ diff --git a/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRCafeImageListResponse.class b/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRCafeImageListResponse.class new file mode 100644 index 0000000..bd9dabb Binary files /dev/null and b/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRCafeImageListResponse.class differ diff --git a/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRCafeListResponse$JMItem.class b/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRCafeListResponse$JMItem.class new file mode 100644 index 0000000..8887613 Binary files /dev/null and b/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRCafeListResponse$JMItem.class differ diff --git a/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRCafeListResponse.class b/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRCafeListResponse.class new file mode 100644 index 0000000..e4a54d2 Binary files /dev/null and b/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRCafeListResponse.class differ diff --git a/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRCityListResponse$JMItem.class b/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRCityListResponse$JMItem.class new file mode 100644 index 0000000..cd51b7f Binary files /dev/null and b/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRCityListResponse$JMItem.class differ diff --git a/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRCityListResponse.class b/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRCityListResponse.class new file mode 100644 index 0000000..27e43c7 Binary files /dev/null and b/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRCityListResponse.class differ diff --git a/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRCourseListResponse$JMItem.class b/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRCourseListResponse$JMItem.class new file mode 100644 index 0000000..de81cd7 Binary files /dev/null and b/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRCourseListResponse$JMItem.class differ diff --git a/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRCourseListResponse.class b/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRCourseListResponse.class new file mode 100644 index 0000000..3ee91fe Binary files /dev/null and b/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRCourseListResponse.class differ diff --git a/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRDescriptorListResponse$JMItem.class b/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRDescriptorListResponse$JMItem.class new file mode 100644 index 0000000..bb1b93d Binary files /dev/null and b/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRDescriptorListResponse$JMItem.class differ diff --git a/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRDescriptorListResponse.class b/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRDescriptorListResponse.class new file mode 100644 index 0000000..e0aa2c3 Binary files /dev/null and b/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRDescriptorListResponse.class differ diff --git a/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRFeedbackListResponse$JMItem.class b/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRFeedbackListResponse$JMItem.class new file mode 100644 index 0000000..b213cfb Binary files /dev/null and b/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRFeedbackListResponse$JMItem.class differ diff --git a/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRFeedbackListResponse.class b/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRFeedbackListResponse.class new file mode 100644 index 0000000..f319b89 Binary files /dev/null and b/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRFeedbackListResponse.class differ diff --git a/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRImageResponse.class b/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRImageResponse.class new file mode 100644 index 0000000..10067d4 Binary files /dev/null and b/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRImageResponse.class differ diff --git a/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRNewOrderResponse.class b/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRNewOrderResponse.class new file mode 100644 index 0000000..fe84ba7 Binary files /dev/null and b/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRNewOrderResponse.class differ diff --git a/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRNewsListResponse$JMItem.class b/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRNewsListResponse$JMItem.class new file mode 100644 index 0000000..ec0d8ad Binary files /dev/null and b/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRNewsListResponse$JMItem.class differ diff --git a/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRNewsListResponse.class b/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRNewsListResponse.class new file mode 100644 index 0000000..4c9167f Binary files /dev/null and b/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRNewsListResponse.class differ diff --git a/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JROrderListResponse$JMOrder$JMMeal.class b/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JROrderListResponse$JMOrder$JMMeal.class new file mode 100644 index 0000000..34de73f Binary files /dev/null and b/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JROrderListResponse$JMOrder$JMMeal.class differ diff --git a/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JROrderListResponse$JMOrder.class b/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JROrderListResponse$JMOrder.class new file mode 100644 index 0000000..0a52267 Binary files /dev/null and b/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JROrderListResponse$JMOrder.class differ diff --git a/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JROrderListResponse.class b/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JROrderListResponse.class new file mode 100644 index 0000000..c98a683 Binary files /dev/null and b/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JROrderListResponse.class differ diff --git a/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRPhoneListResponse$JMItem.class b/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRPhoneListResponse$JMItem.class new file mode 100644 index 0000000..d56a887 Binary files /dev/null and b/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRPhoneListResponse$JMItem.class differ diff --git a/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRPhoneListResponse.class b/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRPhoneListResponse.class new file mode 100644 index 0000000..5677a23 Binary files /dev/null and b/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRPhoneListResponse.class differ diff --git a/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRReserveListResponse$JMItem.class b/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRReserveListResponse$JMItem.class new file mode 100644 index 0000000..51f505e Binary files /dev/null and b/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRReserveListResponse$JMItem.class differ diff --git a/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRReserveListResponse.class b/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRReserveListResponse.class new file mode 100644 index 0000000..bb13a05 Binary files /dev/null and b/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRReserveListResponse.class differ diff --git a/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRSaleListResponse$JMItem.class b/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRSaleListResponse$JMItem.class new file mode 100644 index 0000000..3f87a86 Binary files /dev/null and b/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRSaleListResponse$JMItem.class differ diff --git a/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRSaleListResponse.class b/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRSaleListResponse.class new file mode 100644 index 0000000..a292c6a Binary files /dev/null and b/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRSaleListResponse.class differ diff --git a/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRUserCreateResponse.class b/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRUserCreateResponse.class new file mode 100644 index 0000000..aa46ae3 Binary files /dev/null and b/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRUserCreateResponse.class differ diff --git a/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRUserLoginResponse.class b/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRUserLoginResponse.class new file mode 100644 index 0000000..f0355b9 Binary files /dev/null and b/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRUserLoginResponse.class differ diff --git a/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRUserProfileResponse.class b/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRUserProfileResponse.class new file mode 100644 index 0000000..57bffbe Binary files /dev/null and b/kz_cafe_client/build/classes/kz/cafe/client/rest/wrappers/JRUserProfileResponse.class differ diff --git a/kz_cafe_client/build/classes/kz/cafe/security/Adresses.class b/kz_cafe_client/build/classes/kz/cafe/security/Adresses.class new file mode 100644 index 0000000..22fdf40 Binary files /dev/null and b/kz_cafe_client/build/classes/kz/cafe/security/Adresses.class differ diff --git a/kz_cafe_client/build/classes/kz/cafe/security/Sessions.class b/kz_cafe_client/build/classes/kz/cafe/security/Sessions.class new file mode 100644 index 0000000..1360b13 Binary files /dev/null and b/kz_cafe_client/build/classes/kz/cafe/security/Sessions.class differ diff --git a/kz_cafe_client/build/classes/kz/cafe/statistics/ClientCounters.class b/kz_cafe_client/build/classes/kz/cafe/statistics/ClientCounters.class new file mode 100644 index 0000000..57dccf5 Binary files /dev/null and b/kz_cafe_client/build/classes/kz/cafe/statistics/ClientCounters.class differ diff --git a/kz_cafe_client/src/kz/cafe/client/FEAbstractService.java b/kz_cafe_client/src/kz/cafe/client/FEAbstractService.java new file mode 100644 index 0000000..4225411 --- /dev/null +++ b/kz_cafe_client/src/kz/cafe/client/FEAbstractService.java @@ -0,0 +1,484 @@ +package kz.cafe.client; + +import java.io.*; +import java.security.*; +import java.util.*; +import java.util.concurrent.*; +import java.util.zip.*; +import javax.ws.rs.core.*; +import kz.cafe.constants.*; +import kz.cafe.db.*; +import kz.cafe.db.logs.*; +import kz.cafe.db.logs.model.*; +import kz.cafe.db.model.*; +import kz.cafe.exceptions.*; +import kz.cafe.security.*; +import kz.cafe.statistics.*; +import org.apache.commons.logging.*; +import com.google.code.morphia.query.*; + + +public abstract class FEAbstractService{ + private Log log = LogFactory.getLog(FEAbstractService.class); + + private final String LOG; + + protected ServiceRequestModel srm; + + + protected long lStartTime = System.currentTimeMillis(); + + + protected int UID; + + + + + public FEAbstractService(ServiceRequestModel srm, String LOG){ + + long lThreadID = MongoService.getUniqueRequestID(); + + this.srm = srm; + + this.LOG = LOG; + + Thread.currentThread().setName("" + lThreadID); + + log.info(LOG + "\n" + LogConstants.LOG_NEW_REQUEST + "Incoming Request from: " + srm.remoteAddress); + + updateStatistic(MAbstractStatistics.F_TOTAL); + } + + + + + + + + + protected void responseTime(JRAbstractResponse response){ + responseTime(response, -1L, null, true); + } +// protected void responseTime(JRAbstractResponse response, UserSession3 session3){ +// responseTime(response, getUID(session3), getSID(session3), true); +// } +// protected void responseTime(JRAbstractResponse response, UserSession4 session4){ +// responseTime(response, getUID(session4), getSID(session4), true); +// } + + + + + +// protected void responseTime(JRAbstractResponse response, +// UserSession3 session3, +// boolean bCompress){ +// responseTime(response, session3.profile.UID, session3.SID, bCompress); +// } +// protected void responseTime(JRAbstractResponse response, +// UserSession4 session4, +// boolean bCompress){ +// responseTime(response, session4.profile.UID, session4.SID, bCompress); +// } + + + + + +// protected void responseTime(JRAbstractRequest jrAbstractRequest, +// JRAbstractResponse response, +// UserSession4 session4){ +// +// responseTime(jrAbstractRequest.toString(), response.toString(), getUID(session4), getSID(session4), true); +// } +// protected void responseTime(String POST, +// JRAbstractResponse response, +// UserSession4 session4){ +// responseTime(POST, response.toString(), getUID(session4), getSID(session4), true); +// } +// protected void responseTime(JRAbstractRequest jrAbstractRequest, +// String sResponse, +// UserSession4 session4){ +// responseTime(jrAbstractRequest.toString(), sResponse, getUID(session4), getSID(session4), true); +// } + + + + + + + + protected void responseTime(JRAbstractResponse response, Long UID, String SID, boolean bCompress){ + responseTime(null, response.toString(), UID, SID, bCompress); + } + + + + + protected void responseTime(String sResponse, Long UID){ + responseTime(null, sResponse, UID, "SYSTEM OPERATION", true); + } + + + + +// protected void responseTime(String sResponse, UserSession4 session4){ +// responseTime(null, sResponse, getUID(session4), getSID(session4), true); +// } + + + + + +// private long getUID(UserSession4 session4){ +// if(session4 == null || session4.profile == null){ +// return -1; +// } +// else{ +// return session4.profile.UID; +// } +// } +// private long getUID(UserSession3 session3){ +// if(session3 == null || session3.profile == null){ +// return -1; +// } +// else{ +// return session3.profile.UID; +// } +// } +// +// +// +// +// private String getSID(UserSession4 session4){ +// if(session4 == null){ +// return null; +// } +// else{ +// return session4.SID; +// } +// } +// private String getSID(UserSession3 session3){ +// if(session3 == null){ +// return null; +// } +// else{ +// return session3.SID; +// } +// } + + + + + protected void responseTime(String sPOST, String sResponse, Long UID, String SID, + boolean bCompress){ + MLogHeader mLogHeader = new MLogHeader(); + mLogHeader.IP = srm.remoteIP; + mLogHeader.date = System.currentTimeMillis(); + mLogHeader.performance = mLogHeader.date - lStartTime; + mLogHeader.name = this.getClass().getSimpleName(); + mLogHeader.request_url = srm.URL; + mLogHeader.request_post = sPOST; + mLogHeader.UID = UID; + mLogHeader.SID = SID; + mLogHeader = MongoLogService.addHeader(mLogHeader); + + if(bCompress) { + try{ + MLogBody mLogBody = new MLogBody(); + mLogBody.header = mLogHeader._id; + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + GZIPOutputStream gzipOut = new GZIPOutputStream(baos); + ObjectOutputStream objectOut = new ObjectOutputStream(gzipOut); + objectOut.writeObject(sResponse); + objectOut.close(); + + mLogBody.response = baos.toByteArray(); + MongoLogService.addBody(mLogBody); + } + catch (Throwable e){ + throw new Error("Can not ZIP the '" + sResponse + "'"); + } + } + + + ClientCounters.addRequestTime(this.getClass(), mLogHeader.performance); + + log.info(LOG + "Request time=" + mLogHeader.performance + "ms"); + } + + + + + + + + + + + + protected static final String getCRC32(byte[] data) { + Checksum checksum = new CRC32(); + checksum.update(data, 0, data.length); + long lCRC32 = checksum.getValue(); + + return java.lang.Long.toHexString(lCRC32).toUpperCase(); + } + + + + + + + + protected static final String getMD5(byte[] data) throws Exception{ + MessageDigest md = MessageDigest.getInstance("MD5"); + + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + ObjectOutputStream oos = new ObjectOutputStream(bos); + oos.writeObject(data); + oos.flush(); + oos.close(); + bos.close(); + byte[] arrbyteData = bos.toByteArray(); + + md.update(arrbyteData); + byte[] mdbytes = md.digest(); + + StringBuilder sb = new StringBuilder(); + for(int i = 0; i < mdbytes.length; i++){ + sb.append(Integer.toString((mdbytes[i] & 0xff) + 0x100, 16).substring(1)); + } + + return sb.toString(); + } + + + + + + +// protected JMMIME mimeTypeDetector(String sFileName){ +// JMMIME jmMIME = new JMMIME(); +// +// if(sFileName.endsWith(".jpg")){ +// jmMIME.code = 3; +// jmMIME.name = "image/jpeg"; +// } +// else if(sFileName.endsWith(".gif")){ +// jmMIME.code = 10; +// jmMIME.name = "image/gif"; +// } +// else if(sFileName.endsWith(".png")){ +// jmMIME.code = 115; +// jmMIME.name = "image/png"; +// } +// +// return jmMIME; +// } + + + + + + + + + protected String uglyPath(List uglyPath){ + StringBuilder sbUglyPath = new StringBuilder(); + + for(PathSegment pathSegment : uglyPath){ + if(sbUglyPath.length() > 0) { + sbUglyPath.append("/"); + } + sbUglyPath.append(pathSegment.getPath()); + } + + if(sbUglyPath.charAt(0) == '/' && sbUglyPath.charAt(1) == '/'){ + sbUglyPath.replace(0, 2, "/"); + } + + return sbUglyPath.toString(); + } + + + + protected List uglyPath2Array(List uglyPath){ + List listResult = new ArrayList(); + + for(PathSegment pathSegment : uglyPath){ + listResult.add(pathSegment.getPath()); + } + + return listResult; + } + + + + + + + + protected List string2LongArray(String sLongArray){ + + List listResult = new ArrayList(); + + String[] arrTSes = sLongArray.split(","); + for(String sTS : arrTSes){ + listResult.add(Long.parseLong(sTS)); + } + + return listResult; + } + + + + protected void checkSession(String SID) throws AbstractSecurityException{ + try{ + this.UID = Sessions.getUID(sid2Long(SID)); + } + catch (Exception e){ + throw new SessionNotFoundException(SID); + } + } + + + protected InterfaceConstants.LANGS checkLanguage(String sLang) throws AbstractException{ + try{ + return InterfaceConstants.LANGS.valueOf(sLang); + } + catch (Throwable e){ + throw new LangNotSupportedException(sLang); + } + } + + + + protected String long2sid(long SID){ + return Long.toHexString(SID); + } + + + + + protected long sid2Long(String SID){ + return Long.parseLong(SID, 16); + } + + + + + + + + + + + protected InterfaceConstants.LANGS validateLang(String sLang) throws AbstractException{ + try{ + return InterfaceConstants.LANGS.valueOf(sLang); + } + catch (IllegalArgumentException e){ + StringBuffer sbTmp = new StringBuffer(); + + for(InterfaceConstants.LANGS tmp : InterfaceConstants.LANGS.values()){ + if(sbTmp.length() > 0){ + sbTmp.append(", "); + } + + sbTmp.append(tmp); + } + + throw new BadDataException("LANG", "sLang", sbTmp.toString()); + } + } + + + + + + + + + protected void updateStatistic(String sField){ + String sIP = srm.remoteIP; + Query q = + MongoService.ds.createQuery(MStatisticIP.class).filter(MStatisticIP.F_IP, sIP); + if(q.countAll() == 0){ + MStatisticIP mStatisticIP = new MStatisticIP(); + mStatisticIP.ID = MongoService.getUniqueID(MStatisticIP.class); + mStatisticIP.IP = sIP; + try{ + MongoService.ds.save(mStatisticIP); + } + catch (Throwable e){ + } + } + UpdateOperations uOps = + MongoService.ds.createUpdateOperations(MStatisticIP.class).inc(sField); + MongoService.ds.findAndModify(q, uOps); + + + long lDate = (System.currentTimeMillis() / 1000 / 60 / 60 / 24) * 24 * 60 * 60 * 1000; + Query q2 = + MongoService.ds.createQuery(MStatisticDate.class).filter(MStatisticDate.F_DATE, lDate); + if(q2.countAll() == 0){ + try{ + MStatisticDate mStatisticDate = new MStatisticDate(); + mStatisticDate.ID = MongoService.getUniqueID(MStatisticDate.class); + mStatisticDate.date = lDate; + MongoService.ds.save(mStatisticDate); + } + catch (Throwable e){ + } + } + UpdateOperations uOps2 = + MongoService.ds.createUpdateOperations(MStatisticDate.class).inc(sField); + MongoService.ds.findAndModify(q2, uOps2); + } + + + + + + ConcurrentHashMap mapUsers = new ConcurrentHashMap(); + ConcurrentHashMap mapCafes = new ConcurrentHashMap(); + ConcurrentHashMap mapCities = new ConcurrentHashMap(); + public MUser getUser(int ID){ + MUser mUser = mapUsers.get(ID); + + if(mUser == null){ + mUser = MongoService.get(MUser.class, ID); + mapUsers.put(ID, mUser); + return mUser; + } + else{ + return mUser; + } + } + public MCafe getCafe(int ID){ + MCafe mCafe = mapCafes.get(ID); + + if(mCafe == null){ + mCafe = MongoService.get(MCafe.class, ID); + mapCafes.put(ID, mCafe); + return mCafe; + } + else{ + return mCafe; + } + } + public MCity getCity(int ID){ + MCity mCity = mapCities.get(ID); + + if(mCity == null){ + mCity = MongoService.get(MCity.class, ID); + mapCities.put(ID, mCity); + return mCity; + } + else{ + return mCity; + } + } +} diff --git a/kz_cafe_client/src/kz/cafe/client/JRAbstractRequest.java b/kz_cafe_client/src/kz/cafe/client/JRAbstractRequest.java new file mode 100644 index 0000000..99eb893 --- /dev/null +++ b/kz_cafe_client/src/kz/cafe/client/JRAbstractRequest.java @@ -0,0 +1,26 @@ +package kz.cafe.client; + +import java.io.*; +import javax.xml.bind.*; + +public abstract class JRAbstractRequest{ + + @Override + public String toString(){ + try{ + JAXBContext context = JAXBContext.newInstance(this.getClass()); + Marshaller marshaller = context.createMarshaller(); + + marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true); + + StringWriter sw = new StringWriter(); + + marshaller.marshal(this, sw); + + return sw.toString(); + } + catch (Throwable e){ + throw new Error("Can not marshall", e); + } + } +} diff --git a/kz_cafe_client/src/kz/cafe/client/JRAbstractResponse.java b/kz_cafe_client/src/kz/cafe/client/JRAbstractResponse.java new file mode 100644 index 0000000..a91472b --- /dev/null +++ b/kz_cafe_client/src/kz/cafe/client/JRAbstractResponse.java @@ -0,0 +1,136 @@ +package kz.cafe.client; + +import java.io.*; +import javax.xml.bind.*; +import kz.cafe.constants.*; +import kz.cafe.exceptions.*; +import org.apache.commons.logging.*; + +public abstract class JRAbstractResponse{ + private static Log log = LogFactory.getLog(JRAbstractResponse.class); + + private static final String LOG = "[JR ABSTRACT] "; + + public String requestID; + public Integer operationCode; + public String message; + + + + + + public JRAbstractResponse(){ + this.operationCode = OperationConstants.SUCCESS; + this.requestID = Thread.currentThread().getName(); + } + + + + + + + + + + + public JRAbstractResponse(Throwable e){ + +// if(e instanceof se.vocab.v4.exceptions.security.SessionInvalidException){ +// } +// else { +// log.error(LOG + e, e); +// } + + log.error(LOG + e, e); + + + + this.requestID = Thread.currentThread().getName(); + //this.message = e.toString(); + this.operationCode = OperationConstants.UNKNOWN_ERROR; + + + +// if(e instanceof UserIsAlreadyLoggedException){ +// this.operationCode = OperationConstants.USER_ALREADY_LOGGED; +// } +// else if(e instanceof UserExpiredException){ +// this.operationCode = OperationConstants.USER_EXPIRED; +// } +// else if(e instanceof UserNotRegisteredException){ +// this.operationCode = OperationConstants.USER_NOT_EXISTS; +// } +// else if(e instanceof VT3SecurityException){ +// this.operationCode = OperationConstants.SECURITY_NOT_ENOUGH_RIGHTS; +// } + + + if(e instanceof AbstractException){ + AbstractException e1 = (AbstractException) e; + this.operationCode = e1.getErrorCode(); + this.message = e1.getsMsg(); + +// if(e1 instanceof ServerDataCorruptedException){ +// // ServerDataCorruptedException e2 = (ServerDataCorruptedException) +// // e1; +// +// if(e1.getOriginalException() == null){ +// } +// else{ +// // this.message = e2.getOriginalException().getMessage(); +// } +// } + } + else{ + this.message = e.getMessage(); + } + } + + + + + + + + + + + + + +// @Override +// public String toString(){ +// StringBuilder builder = new StringBuilder(); +// builder.append("requestID="); +// builder.append(requestID); +// builder.append(", operationCode="); +// builder.append(operationCode); +// builder.append(", message="); +// builder.append(message); +// return builder.toString(); +// } + + + + + + @Override + public String toString(){ + try{ + JAXBContext context = JAXBContext.newInstance(this.getClass()); + Marshaller marshaller = context.createMarshaller(); + + marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true); + + StringWriter sw = new StringWriter(); + + marshaller.marshal(this, sw); + + return sw.toString(); + } + catch (Throwable e){ + throw new Error("Can not marshall", e); + } + } +} + diff --git a/kz_cafe_client/src/kz/cafe/client/JREmptyResponse.java b/kz_cafe_client/src/kz/cafe/client/JREmptyResponse.java new file mode 100644 index 0000000..15f37c2 --- /dev/null +++ b/kz_cafe_client/src/kz/cafe/client/JREmptyResponse.java @@ -0,0 +1,21 @@ +package kz.cafe.client; + +import javax.xml.bind.annotation.*; + + +@XmlRootElement(name="response") +public class JREmptyResponse extends JRAbstractResponse{ + + public JREmptyResponse(){ + super(); + } + + + + + + public JREmptyResponse(Throwable e){ + super(e); + } + +} diff --git a/kz_cafe_client/src/kz/cafe/client/ServiceRequestModel.java b/kz_cafe_client/src/kz/cafe/client/ServiceRequestModel.java new file mode 100644 index 0000000..c70bcd7 --- /dev/null +++ b/kz_cafe_client/src/kz/cafe/client/ServiceRequestModel.java @@ -0,0 +1,36 @@ +package kz.cafe.client; + +import javax.servlet.http.*; + + + +public class ServiceRequestModel{ + + public final String remoteAddress; + public final String remoteIP; + public final String URL; + + + + + + public ServiceRequestModel(String remoteAddress, String remoteIP, String URL){ + this.remoteAddress = remoteAddress; + this.remoteIP = remoteIP; + this.URL = URL; + } + + + + + + public static final ServiceRequestModel buildUpponServlet(HttpServletRequest hsr){ + ServiceRequestModel srm = + new ServiceRequestModel(hsr.getRemoteHost() + ":" + hsr.getRemotePort() + "\n" + + hsr.getRequestURL(), + hsr.getRemoteAddr(), + hsr.getRequestURL().toString()); + + return srm; + } +} diff --git a/kz_cafe_client/src/kz/cafe/client/rest/FEAdmin.java b/kz_cafe_client/src/kz/cafe/client/rest/FEAdmin.java new file mode 100644 index 0000000..7c1ccf1 --- /dev/null +++ b/kz_cafe_client/src/kz/cafe/client/rest/FEAdmin.java @@ -0,0 +1,166 @@ +package kz.cafe.client.rest; + +import java.io.*; +import java.util.zip.*; +import javax.servlet.http.*; +import javax.ws.rs.*; +import javax.ws.rs.core.*; +import kz.cafe.client.*; +import kz.cafe.constants.*; +import kz.cafe.db.logs.*; +import kz.cafe.db.logs.model.*; + +@Path("/admin") +public class FEAdmin extends FEAbstractService{ + //private static Log log = LogFactory.getLog(FEAdmin.class); + + private static final String LOG = "[ADMIN] "; + + + + + + public FEAdmin(@Context HttpServletRequest hsr){ + super(ServiceRequestModel.buildUpponServlet(hsr), LOG); + } + + + + + + + + + @GET + @Path("/log/body/{UID}/{date}") + @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) + public String getUserLog(@PathParam("UID") long UID, + @PathParam("date") long date) throws Exception{ + StringBuilder sb = new StringBuilder(); + + sb.append(""); + + for(MLogHeader mLogRecord3 : MongoLogService.getUserLogHeader(UID, date)){ + try{ + ByteArrayInputStream bais = + new ByteArrayInputStream(MongoLogService.getUserRecord(mLogRecord3._id).response); + GZIPInputStream gzipIn = new GZIPInputStream(bais); + ObjectInputStream objectIn = new ObjectInputStream(gzipIn); + sb.append("" + objectIn.readObject()); + objectIn.close(); + } + catch(Throwable e){ + throw new Error("Can not UNZIP binary data", e); + } + } + + sb.append(""); + + + return sb.toString(); + } + + + + + + + + @GET + @Path("/log/headers/{UID}") + @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) + public String getUserLogHeaders(@PathParam("UID") long UID) throws Exception{ + StringBuilder sb = new StringBuilder(); + + sb.append(""); + + for(MLogHeader mLogRecord3 : MongoLogService.getUserLogHeaders(UID)){ + sb.append(""); + sb.append("" + LogConstants.formatDate(mLogRecord3.date) + ""); + sb.append("" + mLogRecord3.date + ""); + sb.append(""); + sb.append("" + mLogRecord3.IP + ""); + sb.append("" + mLogRecord3.request_url + ""); + + if(mLogRecord3.request_post == null){ + // Well, it was GET + } + else{ + sb.append("" + mLogRecord3.request_post + ""); + } + + sb.append(""); + } + + sb.append(""); + + + return sb.toString(); + } + + + + + + + + + + + + + @GET + @Path("/log/headers") + @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) + public String getLogHeaders() throws Exception{ + StringBuilder sb = new StringBuilder(); + + sb.append(""); + + for(MLogHeader mLogRecord3 : MongoLogService.getLogHeaders(1000)){ + sb.append(""); + sb.append("" + LogConstants.formatDate(mLogRecord3.date) + ""); + sb.append("" + mLogRecord3.date + ""); + sb.append(""); + sb.append("" + mLogRecord3.IP + ""); + sb.append("" + mLogRecord3.request_url + ""); + + if(mLogRecord3.request_post == null){ + // Well, it was GET + } + else{ + sb.append("" + mLogRecord3.request_post + ""); + } + + sb.append(""); + } + + sb.append(""); + + + return sb.toString(); + } + + + + + + + + + + + + +// try{ +// ByteArrayInputStream bais = new ByteArrayInputStream(mLogRecord3.response); +// GZIPInputStream gzipIn = new GZIPInputStream(bais); +// ObjectInputStream objectIn = new ObjectInputStream(gzipIn); +// sb.append("" + objectIn.readObject()); +// objectIn.close(); +// } +// catch (Throwable e){ +// throw new Error("Can not UNZIP binary data"); +// } + +} diff --git a/kz_cafe_client/src/kz/cafe/client/rest/FECafe.java b/kz_cafe_client/src/kz/cafe/client/rest/FECafe.java new file mode 100644 index 0000000..a7e61f1 --- /dev/null +++ b/kz_cafe_client/src/kz/cafe/client/rest/FECafe.java @@ -0,0 +1,843 @@ +package kz.cafe.client.rest; + +import java.text.*; +import java.util.*; +import javax.servlet.http.*; +import javax.ws.rs.*; +import javax.ws.rs.core.*; +import org.apache.commons.logging.*; +import kz.cafe.client.*; +import kz.cafe.client.rest.wrappers.*; +import kz.cafe.constants.*; +import kz.cafe.db.*; +import kz.cafe.db.model.*; +import kz.cafe.db.service.*; +import kz.cafe.exceptions.*; +import kz.cafe.utils.*; + + + +@Path("/cafe") +public class FECafe extends FEAbstractService{ + private static Log log = LogFactory.getLog(FECafe.class); + + private static final String LOG = "[JR CAFE] "; + + + + + + // private UserSession4 session = null; + + public FECafe(@Context HttpServletRequest hsr){ + super(ServiceRequestModel.buildUpponServlet(hsr), LOG); + } + + + + + + @SuppressWarnings("unchecked") + @GET + @Path("/list/{LANG}/{TIME}") + @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) + public JRCafeListResponse list(@PathParam("LANG") String sLang, + @PathParam("TIME") long lTime){ + + JRCafeListResponse response = new JRCafeListResponse(); + + try{ + InterfaceConstants.LANGS lang = validateLang(sLang); + + for(MCafe mCafe : (List) MongoService.getListFrontEnd(MCafe.class, lTime)){ + + if(response.checkDeleted(mCafe)){ + JRCafeListResponse.JMItem item = response.add(); + + item.fillIn(lang, mCafe); + try{ + item.type = mCafe.types.iterator().next(); + } + catch (Exception e){ + item.type = 0; + } + item.rate = mCafe.rate; + item.price = mCafe.price; + + + //With no GMT + item.timeClose = mCafe.timeCloseMo; + item.timeOpen = mCafe.timeOpenMo; + item.timeCloseWeekend = mCafe.timeCloseSa; + item.timeOpenWeekend = mCafe.timeOpenSa; + + + + item.phone = mCafe.phone; + item.address = mCafe.address.get(lang); + + if(mCafe.service == null || mCafe.service.size() == 0){ + item.service = ""; + } + else{ + String sService = mCafe.service.toString(); + item.service = sService.substring(1, sService.length() - 1); + } + + item.coordinates = mCafe.coordinates; + + item.hasDelivery = mCafe.hasDelivery; + item.hasReservation = mCafe.hasReservation; + + if(mCafe.types == null || mCafe.types.size() == 0){ + item.types = ""; + } + else{ + String sTypes = mCafe.types.toString(); + item.types = sTypes.substring(1, sTypes.length() - 1); + } + + if(mCafe.cuisines == null || mCafe.cuisines.size() == 0){ + item.cuisines = ""; + } + else{ + String sCuisines = mCafe.cuisines.toString(); + item.cuisines = sCuisines.substring(1, sCuisines.length() - 1); + } + + if(mCafe.faceControl == null || mCafe.faceControl.size() == 0){ + item.requirements = ""; + } + else{ + String sFaceControl = mCafe.faceControl.toString(); + item.requirements = sFaceControl.substring(1, sFaceControl.length() - 1); + } + + item.tables_total = mCafe.tableTotal; + item.tables_free = mCafe.tableFree; + + item.bill_average_min = mCafe.bill_average_min; + item.bill_average_max = mCafe.bill_average_max; + + item.city = mCafe.city; + + + //With no GMT + item.timeCloseMo = mCafe.timeCloseMo; + item.timeOpenMo = mCafe.timeOpenMo; + item.timeCloseTu = mCafe.timeCloseTu; + item.timeOpenTu = mCafe.timeOpenTu; + item.timeCloseWe = mCafe.timeCloseWe; + item.timeOpenWe = mCafe.timeOpenWe; + item.timeCloseTh = mCafe.timeCloseTh; + item.timeOpenTh = mCafe.timeOpenTh; + item.timeCloseFr = mCafe.timeCloseFr; + item.timeOpenFr = mCafe.timeOpenFr; + item.timeCloseSa = mCafe.timeCloseSa; + item.timeOpenSa = mCafe.timeOpenSa; + item.timeCloseSu = mCafe.timeCloseSu; + item.timeOpenSu = mCafe.timeOpenSu; + + + + item.timeOrdersFrom = mCafe.timeOrdersFrom; + item.timeOrdersTo = mCafe.timeOrdersTo; + item.timeReservationFrom = mCafe.timeReservationFrom; + item.timeReservationTo = mCafe.timeReservationTo; + + + //Let's add GMT + MCity mCity = getCity(mCafe.city); + if(mCity == null){ + } + else{ + item.timeClose -= mCity.GMT * 60; + item.timeOpen -= mCity.GMT * 60; + item.timeCloseWeekend -= mCity.GMT * 60; + item.timeOpenWeekend -= mCity.GMT * 60; + + item.timeCloseMo -= mCity.GMT * 60; + item.timeOpenMo -= mCity.GMT * 60; + item.timeCloseTu -= mCity.GMT * 60; + item.timeOpenTu -= mCity.GMT * 60; + item.timeCloseWe -= mCity.GMT * 60; + item.timeOpenWe -= mCity.GMT * 60; + item.timeCloseTh -= mCity.GMT * 60; + item.timeOpenTh -= mCity.GMT * 60; + item.timeCloseFr -= mCity.GMT * 60; + item.timeOpenFr -= mCity.GMT * 60; + item.timeCloseSa -= mCity.GMT * 60; + item.timeOpenSa -= mCity.GMT * 60; + item.timeCloseSu -= mCity.GMT * 60; + item.timeOpenSu -= mCity.GMT * 60; + + + //They are nullable + if(item.timeOrdersFrom == null){ + } + else{ + item.timeOrdersFrom -= mCity.GMT * 60; + } + if(item.timeOrdersTo == null){ + } + else{ + item.timeOrdersTo -= mCity.GMT * 60; + } + if(item.timeReservationFrom == null){ + } + else{ + item.timeReservationFrom -= mCity.GMT * 60; + } + if(item.timeReservationTo == null){ + } + else{ + item.timeReservationTo -= mCity.GMT * 60; + } + } + } + } + } + catch (Throwable e){ + response = new JRCafeListResponse(e); + } + + updateStatistic(MAbstractStatistics.F_MENU); + super.responseTime(response); + return response; + } + + + + + + // --------------------------------------------------------------------------------------------- + // Images + // --------------------------------------------------------------------------------------------- + @GET + @Path("/image/list/{LANG}/{TIME}") + @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) + @SuppressWarnings({ "unchecked" }) + public JRCafeImageListResponse getFeedbacks(@PathParam("LANG") String sLang, + @PathParam("TIME") long lTime){ + JRCafeImageListResponse response = new JRCafeImageListResponse(); + + try{ + InterfaceConstants.LANGS lang = validateLang(sLang); + + for(MCafeImage mCafeImage : (List) MongoService.getListFrontEnd( + MCafeImage.class, lTime)){ + if(response.checkDeleted(mCafeImage)){ + JRCafeImageListResponse.JMItem item = response.add(); + item.fillIn(lang, mCafeImage); + + item.CID = mCafeImage.CID; + } + } + } + catch (Throwable e){ + response = new JRCafeImageListResponse(e); + } + + updateStatistic(MAbstractStatistics.F_FEEDBACKS); + super.responseTime(response); + return response; + } + + + + + + @SuppressWarnings("unchecked") + @GET + @Path("/menu/list/{LANG}/{TIME}") + @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) + public JRCourseListResponse listMenu(@PathParam("LANG") String sLang, + @PathParam("TIME") long lTime){ + + JRCourseListResponse response = new JRCourseListResponse(); + + try{ + InterfaceConstants.LANGS lang = validateLang(sLang); + + for(MCourse mCourse : (List) MongoService.getListFrontEnd(MCourse.class, lTime)){ + + if(response.checkDeleted(mCourse)){ + JRCourseListResponse.JMItem item = response.add(); + item.fillIn(lang, mCourse); + item.category = mCourse.category; + item.CID = mCourse.CID; + item.price = mCourse.price; + + String sIngredients = mCourse.ingredient.toString(); + item.ingredients = sIngredients.substring(1, sIngredients.length() - 1); + + item.weight = mCourse.weight2.get(lang); + item.delivery = mCourse.delivery; + } + } + + } + catch (Throwable e){ + response = new JRCourseListResponse(e); + } + + updateStatistic(MAbstractStatistics.F_MENU); + super.responseTime(response); + return response; + } + + + + + + @GET + @Path("/reserve/list/{SID}/{LANG}/{TIME}") + @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) + public JRReserveListResponse listReservation(@PathParam("SID") String SID, + @PathParam("LANG") String sLang, + @PathParam("TIME") long lTime){ + + JRReserveListResponse response = new JRReserveListResponse(); + + try{ + checkSession(SID); + InterfaceConstants.LANGS lang = validateLang(sLang); + + for(MReservation mReservation : MongoService.getReserves(super.UID, lTime)){ + if(response.checkDeleted(mReservation)){ + JRReserveListResponse.JMItem item = response.add(); + item.fillIn(mReservation); + item.date = mReservation.date; + item.CID = mReservation.CID; + item.sits = mReservation.sits; + item.comment = mReservation.comment.get(lang); + item.confirmed = mReservation.confirmed; + } + } + + } + catch (Throwable e){ + response = new JRReserveListResponse(e); + } + + updateStatistic(MAbstractStatistics.F_MENU); + super.responseTime(response); + return response; + } + + + + + + // --------------------------------------------------------------------------------------------- + // add new reserver + // --------------------------------------------------------------------------------------------- + @GET + @Path("/reserve/new/{SID}/{date}/{CID}/{sits}/{lang}/{comment}") + @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) + public JREmptyResponse newReservation(@PathParam("SID") String SID, + @PathParam("date") long date, + @PathParam("CID") int CID, + @PathParam("sits") int iSits, + @PathParam("lang") String sLang, + @PathParam("comment") String sComment){ + JREmptyResponse response = new JREmptyResponse(); + + try{ + checkSession(SID); + + MCafe mCafe = MongoService.getExceptionable(MCafe.class, CID); + InterfaceConstants.LANGS lang = validateLang(sLang); + + MReservation mReservation = new MReservation(); + mReservation.ID = MongoService.getUniqueID(MReservation.class); + mReservation.UID = super.UID; + mReservation.ownerID = mCafe.ownerID; + mReservation.CID = CID; + mReservation.date = date; + mReservation.sits = iSits; + mReservation.comment.put(lang, sComment); + + MongoService.save(mReservation); + + + HashMap map = new HashMap(); + map.put("cafe_name", mCafe.name); + + MUser mUser = MongoService.get(MUser.class, UID); + map.put("user_login", mUser.login); + map.put("user_name", mUser.name); + map.put("user_phone", mUser.phone); + + map.put("sits", iSits); + map.put("date", new SimpleDateFormat("HH:mm dd-MM-yyyy").format(date)); + map.put("comment", sComment); + + + String sNewReservation = VelocityProc.run("new_reserve.vm", map); + + //To Admin + Mailer.sendMail(ServerConstants.getRobot(), + ServerConstants.getEmailAddressSystemAdmin(), + "Новый резерв в " + mCafe.name, + sNewReservation); + + //To cafe owner + MUser mUserCafeOwner = MongoService.get(MUser.class, mCafe.ownerID); + + log.info(LOG + "Email Notification for Admin=" + mUserCafeOwner.ID + " is " + (mUserCafeOwner.hasEmailNotifications ? "ON" : "OFF")); + + if(mUserCafeOwner.hasEmailNotifications){ + Mailer.sendMail(ServerConstants.getRobot(), + mUserCafeOwner.login, + "Новый резерв в " + mCafe.name, + sNewReservation); + } + } + catch (Throwable e){ + response = new JREmptyResponse(e); + } + + updateStatistic(MAbstractStatistics.F_FEEDBACK_NEW); + super.responseTime(response); + return response; + } + + + + + + // --------------------------------------------------------------------------------------------- + // add new order + // --------------------------------------------------------------------------------------------- + @GET + @Path("/order/new/{SID}/{CID}/{date}/{AID}/{lang}/{comment}/{paths:.+}") + @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) + public JRNewOrderResponse newOrder(@PathParam("SID") String SID, + @PathParam("CID") int CID, + @PathParam("date") long date, + @PathParam("AID") int AID, + @PathParam("lang") String sLang, + @PathParam("comment") String sComment, + @PathParam("paths") List uglyPath){ + JRNewOrderResponse response = new JRNewOrderResponse(); + + List listOrderItems = uglyPath2Array(uglyPath); + + try{ + checkSession(SID); + + MCafe mCafe = MongoService.getExceptionable(MCafe.class, CID); + + if(AID > 0){ + MongoService.getExceptionable(MSale.class, AID); + } + + InterfaceConstants.LANGS lang = validateLang(sLang); + + MOrder mOrder = new MOrder(); + mOrder.ID = MongoService.getUniqueID(MOrder.class); + response.OID = mOrder.ID; + + mOrder.CID = CID; + + if(AID > 0){ + mOrder.AID = AID; + } + + mOrder.UID = super.UID; + mOrder.comment.put(lang, sComment); + mOrder.ownerID = mCafe.ownerID; + + int iPrice = 0; + List listVelocityItems = new ArrayList(); + + while (listOrderItems.size() > 0){ + int MID = Integer.parseInt(listOrderItems.remove(0)); + int iQuantity = Integer.parseInt(listOrderItems.remove(0)); + + MCourse mCourse = (MCourse) MongoService.getExceptionable(MCourse.class, MID); + + MOrderItem mOrderItem = new MOrderItem(); + mOrderItem.ID = MongoService.getUniqueID(MOrderItem.class); + mOrderItem.OID = mOrder.ID; + mOrderItem.MID = MID; + mOrderItem.quantity = iQuantity; + mOrderItem.price = mCourse.price * iQuantity; + MongoService.save(mOrderItem); + + + iPrice += mOrderItem.price; + + VOrderItem vOrderItem = new VOrderItem(mCourse.name, + iQuantity, + "" + new Float(mCourse.price) / 100); + listVelocityItems.add(vOrderItem); + } + + mOrder.price = iPrice; + MongoService.save(mOrder); + + MongoOrderService.racalculteCounters(mOrder); + + + HashMap map = new HashMap(); + map.put("cafe_name", mCafe.name); + + MUser mUser = MongoService.get(MUser.class, UID); + map.put("user_login", mUser.login); + map.put("user_name", mUser.name); + map.put("user_phone", mUser.phone); + + map.put("comment", sComment); + + map.put("items", listVelocityItems); + + map.put("price", "" + new Float(iPrice) / 100); + + + String sNewOrder = VelocityProc.run("new_order.vm", map); + + //To Admin + Mailer.sendMail(ServerConstants.getRobot(), + ServerConstants.getEmailAddressSystemAdmin(), + "Новый заказ в " + mCafe.name, + sNewOrder); + + //To cafe owner + MUser mUserCafeOwner = MongoService.get(MUser.class, mCafe.ownerID); + + log.info(LOG + "Email Notification for Admin=" + mUserCafeOwner.ID + " is " + (mUserCafeOwner.hasEmailNotifications ? "ON" : "OFF")); + + if(mUserCafeOwner.hasEmailNotifications){ + Mailer.sendMail(ServerConstants.getRobot(), + mUserCafeOwner.login, + "Новый заказ в " + mCafe.name, + sNewOrder); + } + } + catch (Throwable e){ + response = new JRNewOrderResponse(e); + } + + updateStatistic(MAbstractStatistics.F_ORDER_NEW); + super.responseTime(response); + return response; + } + + + + + + + public static class VOrderItem{ + private final Map name; + private final int quantity; + private final String price; + + public VOrderItem(Map name, int quantity, String price){ + this.name = name; + this.quantity = quantity; + this.price = price; + } + public Map getName(){ + return name; + } + public int getQuantity(){ + return quantity; + } + public String getPrice(){ + return price; + } + } + + + + + + + // --------------------------------------------------------------------------------------------- + // update order + // --------------------------------------------------------------------------------------------- + @GET + @Path("/order/update/{SID}/{OID}/{CID}/{date}/{AID}/{lang}/{comment}/{paths:.+}") + @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) + public JREmptyResponse updateOrder(@PathParam("SID") String SID, + @PathParam("OID") int OID, + @PathParam("CID") int CID, + @PathParam("date") long date, + @PathParam("AID") int AID, + @PathParam("lang") String sLang, + @PathParam("comment") String sComment, + @PathParam("paths") List uglyPath){ + JREmptyResponse response = new JREmptyResponse(); + + List listOrders = uglyPath2Array(uglyPath); + + try{ + checkSession(SID); + + MCafe mCafe = MongoService.getExceptionable(MCafe.class, CID); + MongoService.getExceptionable(MSale.class, AID); + + InterfaceConstants.LANGS lang = validateLang(sLang); + + MOrder mOrder = MongoService.get(MOrder.class, OID); + mOrder.CID = CID; + + if(AID > 0){ + mOrder.AID = AID; + } + + mOrder.UID = super.UID; + mOrder.comment.put(lang, sComment); + mOrder.ownerID = mCafe.ownerID; + + List listOrderItems = MongoService.ds.find(MOrderItem.class) + .filter(MOrderItem.F_OID, OID).asList(); + + for(MOrderItem mOrderItem : listOrderItems){ + mOrderItem.deleted = true; + } + + while (listOrders.size() > 0){ + int MID = Integer.parseInt(listOrders.remove(0)); + int iQuantity = Integer.parseInt(listOrders.remove(1)); + + MOrderItem mOrderItem; + if(listOrderItems.size() > 0){ + mOrderItem = listOrderItems.remove(0); + } + else{ + mOrderItem = new MOrderItem(); + mOrderItem.ID = MongoService.getUniqueID(MOrderItem.class); + } + + mOrderItem.OID = mOrder.ID; + mOrderItem.MID = MID; + mOrderItem.quantity = iQuantity; + MongoService.save(mOrderItem); + } + + for(MOrderItem mOrderItem : listOrderItems){ + MongoService.save(mOrderItem); + } + + MongoService.save(mOrder); + } + catch (Throwable e){ + response = new JREmptyResponse(e); + } + + // updateStatistic(MAbstractStatistics.F_ORDER_NEW); + super.responseTime(response); + return response; + } + + + + + + // --------------------------------------------------------------------------------------------- + // update order + // --------------------------------------------------------------------------------------------- + @GET + @Path("/order/list/{SID}") + @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) + public JROrderListResponse listOrders(@PathParam("SID") String SID){ + JROrderListResponse response = new JROrderListResponse(); + + try{ + checkSession(SID); + + List listOrders = MongoService.ds.find(MOrder.class) + .filter(MOrder.F_UID, super.UID).asList(); + for(MOrder mOrder : listOrders){ + JROrderListResponse.JMOrder jmOrder = response.add(); + jmOrder.ID = mOrder.ID; + jmOrder.CID = mOrder.CID; + jmOrder.AID = mOrder.AID; + + List listOrderItems = MongoService.ds.find(MOrderItem.class) + .filter(MOrderItem.F_OID, mOrder.ID).asList(); + + for(MOrderItem mOrderItem : listOrderItems){ + JROrderListResponse.JMOrder.JMMeal jmMeal = jmOrder.add(); + jmMeal.IID = mOrderItem.MID; + jmMeal.quantity = mOrderItem.quantity; + } + } + } + catch (Throwable e){ + response = new JROrderListResponse(e); + } + + // updateStatistic(MAbstractStatistics.F_ORDER_NEW); + super.responseTime(response); + return response; + } + + + + + + + + // --------------------------------------------------------------------------------------------- + // add new order + // --------------------------------------------------------------------------------------------- + @GET + @Path("/order/delivery/set/{SID}/{OID}/{CITY}/{STREET}/{BUILDING}/{APARTMENT}/{PHONE}") + @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) + public JREmptyResponse setDeliveryAddress(@PathParam("SID") String SID, + @PathParam("OID") int OID, + @PathParam("CITY") int CityID, + @PathParam("STREET") String sStreet, + @PathParam("BUILDING") String sBuilding, + @PathParam("APARTMENT") String sApartment, + @PathParam("PHONE") String sPhone){ + + + + JREmptyResponse response = new JREmptyResponse(); + + try{ + checkSession(SID); + + MOrder mOrder = MongoService.getExceptionable(MOrder.class, OID); + if(mOrder.UID == UID){ + mOrder.deliveryCity = MongoService.getExceptionable(MCity.class, CityID).ID;; + mOrder.deliveryStreet = sStreet; + mOrder.deliveryBuilding = sBuilding; + mOrder.deliveryApartment = sApartment; + mOrder.deliveryPhone = sPhone; + MongoService.save(mOrder); + } + else{ + throw new AccessDeniedException(MOrder.class, mOrder.ID); + } + } + catch (Throwable e){ + response = new JREmptyResponse(e); + } + + // updateStatistic(MAbstractStatistics.F_ORDER_NEW); + super.responseTime(response); + return response; + } + + + + + + + + + + + + // --------------------------------------------------------------------------------------------- + // Descriptors + // --------------------------------------------------------------------------------------------- + + @GET + @Path("/ingredients/list/{LANG}/{TIME}") + @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) + public JRDescriptorListResponse ingredients(@PathParam("LANG") String sLang, + @PathParam("TIME") long lTime){ + + return getDescriptors(MIngredient.class, sLang, lTime); + } + + + + + + @GET + @Path("/menu/category/list/{LANG}/{TIME}") + @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) + public JRDescriptorListResponse courseCategories(@PathParam("LANG") String sLang, + @PathParam("TIME") long lTime){ + + return getDescriptors(MCourseCategory.class, sLang, lTime); + } + + + + + + @GET + @Path("/type/list/{LANG}/{TIME}") + @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) + public JRDescriptorListResponse cafeTypes(@PathParam("LANG") String sLang, + @PathParam("TIME") long lTime){ + + return getDescriptors(MCafeType.class, sLang, lTime); + } + + + + + + @GET + @Path("/service/list/{LANG}/{TIME}") + @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) + public JRDescriptorListResponse serviceTypes(@PathParam("LANG") String sLang, + @PathParam("TIME") long lTime){ + + return getDescriptors(MServiceType.class, sLang, lTime); + } + + + + @GET + @Path("/cuisine/list/{LANG}/{TIME}") + @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) + public JRDescriptorListResponse cuisines(@PathParam("LANG") String sLang, + @PathParam("TIME") long lTime){ + + return getDescriptors(MCuisine.class, sLang, lTime); + } + + + + @GET + @Path("/req/list/{LANG}/{TIME}") + @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) + public JRDescriptorListResponse faceControl(@PathParam("LANG") String sLang, + @PathParam("TIME") long lTime){ + + return getDescriptors(MFaceControl.class, sLang, lTime); + } + + + + + + + + @SuppressWarnings({ "rawtypes", "unchecked" }) + private JRDescriptorListResponse getDescriptors(Class clas, String sLang, long lTime){ + JRDescriptorListResponse response = new JRDescriptorListResponse(); + + try{ + InterfaceConstants.LANGS lang = validateLang(sLang); + + for(MAbstractDescriptor mAbstractDescriptor : + (List) MongoService.getListFrontEnd(clas, lTime)){ + + if(response.checkDeleted(mAbstractDescriptor)){ + JRDescriptorListResponse.JMItem item = response.add(); + item.fillIn(lang, mAbstractDescriptor); + } + } + } + catch (Throwable e){ + response = new JRDescriptorListResponse(e); + } + + updateStatistic(MAbstractStatistics.F_MENU); + super.responseTime(response); + return response; + } +} diff --git a/kz_cafe_client/src/kz/cafe/client/rest/FECity.java b/kz_cafe_client/src/kz/cafe/client/rest/FECity.java new file mode 100644 index 0000000..b79b9c5 --- /dev/null +++ b/kz_cafe_client/src/kz/cafe/client/rest/FECity.java @@ -0,0 +1,63 @@ +package kz.cafe.client.rest; + +import java.util.*; +import javax.servlet.http.*; +import javax.ws.rs.*; +import javax.ws.rs.core.*; +import kz.cafe.client.*; +import kz.cafe.client.rest.wrappers.*; +import kz.cafe.constants.*; +import kz.cafe.db.*; +import kz.cafe.db.model.*; + + +@Path("/city") +public class FECity extends FEAbstractService{ +// private static Log log = LogFactory.getLog(FESale.class); + + private static final String LOG = "[JR SALE] "; + + + + public FECity(@Context HttpServletRequest hsr){ + super(ServiceRequestModel.buildUpponServlet(hsr), LOG); + } + + + + + + + + //--------------------------------------------------------------------------------------------- + //Cities + //--------------------------------------------------------------------------------------------- + @GET + @Path("/list/{LANG}/{TIME}") + @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) + @SuppressWarnings({ "unchecked" }) + public JRCityListResponse getCities(@PathParam("LANG") String sLang, + @PathParam("TIME") long lTime){ + JRCityListResponse response = new JRCityListResponse(); + + try{ + InterfaceConstants.LANGS lang = validateLang(sLang); + + for(MCity mCity : (List) MongoService.getListFrontEnd(MCity.class, lTime)){ + if(response.checkDeleted(mCity)){ + JRCityListResponse.JMItem item = response.add(); + item.fillIn(lang, mCity); + + item.GMT = mCity.GMT; + item.hasCafe = mCity.hasCafe; + } + } + } + catch(Throwable e){ + response = new JRCityListResponse(e); + } + + super.responseTime(response); + return response; + } +} \ No newline at end of file diff --git a/kz_cafe_client/src/kz/cafe/client/rest/FEFeedback.java b/kz_cafe_client/src/kz/cafe/client/rest/FEFeedback.java new file mode 100644 index 0000000..58b33f4 --- /dev/null +++ b/kz_cafe_client/src/kz/cafe/client/rest/FEFeedback.java @@ -0,0 +1,222 @@ +package kz.cafe.client.rest; + +import java.util.*; +import javax.servlet.http.*; +import javax.ws.rs.*; +import javax.ws.rs.core.*; +import kz.cafe.client.*; +import kz.cafe.client.rest.wrappers.*; +import kz.cafe.constants.*; +import kz.cafe.db.*; +import kz.cafe.db.model.*; +import kz.cafe.db.service.*; +import kz.cafe.utils.*; + + +@Path("/feedback") +public class FEFeedback extends FEAbstractService{ + //private static Log log = LogFactory.getLog(FEFeedback.class); + + private static final String LOG = "[JR USER] "; + +// private UserSession4 session = null; + + + + + + public FEFeedback(@Context HttpServletRequest hsr){ + super(ServiceRequestModel.buildUpponServlet(hsr), LOG); + } + + + + + + + + + + + + //--------------------------------------------------------------------------------------------- + //list + //--------------------------------------------------------------------------------------------- + @GET + @Path("/list/{LANG}/{TIME}") + @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) + @SuppressWarnings({ "unchecked" }) + public JRFeedbackListResponse getFeedbacks(@PathParam("LANG") String sLang, + @PathParam("TIME") long lTime){ + JRFeedbackListResponse response = new JRFeedbackListResponse(); + + InterfaceConstants.LANGS lang = InterfaceConstants.LANGS.valueOf(sLang); + + try{ + for(MFeedback mFeedback : (List) MongoService.getListFrontEnd(MFeedback.class, lTime)){ + + if(response.checkDeleted(mFeedback)){ + JRFeedbackListResponse.JMItem item = response.add(); + item.fillIn(mFeedback); + + MUser mUser = getUser(mFeedback.UID); + + item.CID = mFeedback.CID; + item.avatar = item.checkIsImageEmpty(mUser.image); + item.login = mUser.login; + item.name = mUser.name; + item.rate = mFeedback.rate; + item.text = mFeedback.text.get(lang); + item.title = mFeedback.title.get(lang); + } + } + } + catch(Throwable e){ + response = new JRFeedbackListResponse(e); + } + + updateStatistic(MAbstractStatistics.F_FEEDBACKS); + super.responseTime(response); + return response; + } + + + + + + + //--------------------------------------------------------------------------------------------- + //add new + //--------------------------------------------------------------------------------------------- + @GET + @Path("/new/{SID}/{CID}/{rate}") + @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) + public JREmptyResponse newFeedbacks(@PathParam("SID") String SID, + @PathParam("CID") int CID, + @PathParam("rate") int iRate){ + + return newFeedbacks(SID, CID, iRate, null, null); + } + + + @GET + @Path("/new/{SID}/{CID}/{rate}/{lang}/{text}") + @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) + public JREmptyResponse newFeedbacks(@PathParam("SID") String SID, + @PathParam("CID") int CID, + @PathParam("rate") int iRate, + @PathParam("lang") String sLang, + @PathParam("text") String sText){ + JREmptyResponse response = new JREmptyResponse(); + + try{ + checkSession(SID); + + MCafe mCafe = MongoService.getExceptionable(MCafe.class, CID); + + MFeedback mFeedback = new MFeedback(); + mFeedback.ID = MongoService.getUniqueID(MFeedback.class); + mFeedback.CID = mCafe.ID; + mFeedback.UID = super.UID; + mFeedback.ownerID = mCafe.ownerID; + + if(sLang == null){ + } + else{ + InterfaceConstants.LANGS lang = checkLanguage(sLang); + mFeedback.text.put(lang, sText); + } + + mFeedback.rate = iRate; + MongoService.save(mFeedback); + + + MongoFeedbackService.racalculte(CID); + + MUser mUser = MongoService.get(MUser.class, UID); + sendEmail(mUser, mCafe, "", iRate, sText); + } + catch(Throwable e){ + response = new JREmptyResponse(e); + } + + updateStatistic(MAbstractStatistics.F_FEEDBACK_NEW); + super.responseTime(response); + return response; + } + + + + + + @GET + @Path("/new/{SID}/{CID}/{rate}/{lang}/{text}/{title}") + @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) + public JREmptyResponse newFeedbacks(@PathParam("SID") String SID, + @PathParam("CID") int CID, + @PathParam("rate") int iRate, + @PathParam("lang") String sLang, + @PathParam("text") String sText, + @PathParam("title") String sTitle){ + JREmptyResponse response = new JREmptyResponse(); + + try{ + checkSession(SID); + + MCafe mCafe = MongoService.getExceptionable(MCafe.class, CID); + + MFeedback mFeedback = new MFeedback(); + mFeedback.ID = MongoService.getUniqueID(MFeedback.class); + mFeedback.CID = mCafe.ID; + mFeedback.UID = super.UID; + mFeedback.ownerID = mCafe.ownerID; + + if(sLang == null){ + } + else{ + InterfaceConstants.LANGS lang = checkLanguage(sLang); + mFeedback.text.put(lang, sText); + + mFeedback.title.put(lang, sTitle); + } + + mFeedback.rate = iRate; + MongoService.save(mFeedback); + + + MongoFeedbackService.racalculte(CID); + + MUser mUser = MongoService.get(MUser.class, UID); + sendEmail(mUser, mCafe, sTitle, iRate, sText); + } + catch(Throwable e){ + response = new JREmptyResponse(e); + } + + updateStatistic(MAbstractStatistics.F_FEEDBACK_NEW); + super.responseTime(response); + return response; + } + + + + private static void sendEmail(MUser mUser, MCafe mCafe, String sTitle, int iRate, String sText) throws Exception{ + + HashMap map = new HashMap(); + map.put("cafe_name", mCafe.name); + map.put("user_login", mUser.login); + map.put("user_name", mUser.name); + map.put("user_phone", mUser.phone); + map.put("title", sTitle); + map.put("rate", iRate); + map.put("text", sText); + + + Mailer.sendMail(ServerConstants.getRobot(), + ServerConstants.getEmailAddressSystemAdmin(), + "Новый отзыв", + VelocityProc.run("new_feedback.vm", map)); + + } +} + diff --git a/kz_cafe_client/src/kz/cafe/client/rest/FEImages.java b/kz_cafe_client/src/kz/cafe/client/rest/FEImages.java new file mode 100644 index 0000000..dc260bc --- /dev/null +++ b/kz_cafe_client/src/kz/cafe/client/rest/FEImages.java @@ -0,0 +1,94 @@ +package kz.cafe.client.rest; + +import java.io.*; +import java.util.*; +import javax.servlet.http.*; +import javax.ws.rs.*; +import javax.ws.rs.core.*; +import kz.cafe.client.*; +import kz.cafe.client.rest.wrappers.*; +import kz.cafe.constants.*; +import kz.cafe.db.*; +import kz.cafe.db.model.*; +import org.apache.commons.fileupload.*; +import org.apache.commons.fileupload.disk.*; +import org.apache.commons.fileupload.servlet.*; + + +@Path("/images") +public class FEImages extends FEAbstractService{ + +// private static Log log = LogFactory.getLog(FEImages.class); + + private static final String LOG = "[JR IMAGE] "; + + + + + + public FEImages(@Context HttpServletRequest hsr){ + super(ServiceRequestModel.buildUpponServlet(hsr), LOG); + } + + + + + @POST + @Path("/new/{SID}") + @Consumes(MediaType.MULTIPART_FORM_DATA) + @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) + public JRImageResponse post(@PathParam("SID") String SID, @Context HttpServletRequest request){ + + JRImageResponse response = new JRImageResponse(); + + try{ + checkSession(SID); + + + if(ServletFileUpload.isMultipartContent(request)){ + FileItemFactory factory = new DiskFileItemFactory(); + + ServletFileUpload upload = new ServletFileUpload(factory); + + @SuppressWarnings("unchecked") + List items = upload.parseRequest(request); + + if(items.size() == 0) { + throw new Exception("Нет файла в запросе"); + } + else{ + FileItem item = items.get(0); + + String sFileExtension; + + try{ + sFileExtension = item.getName().split("\\.")[1].trim(); + } + catch (Exception e1){ + throw new Error("Имя файла должно содержать расширение"); + } + + + String sFileName = MongoService.getUniqueID(MImage.class) + + "." + + sFileExtension; + + FileOutputStream fout = + new FileOutputStream(new File(ServerConstants.getImageFolder() + sFileName)); + + fout.write(item.get()); + + response.image = sFileName; + + return response; + } + } + else { + throw new Exception("Not a multipart form."); + } + } + catch (Throwable e){ + return new JRImageResponse(e); + } + } +} diff --git a/kz_cafe_client/src/kz/cafe/client/rest/FEMessage.java b/kz_cafe_client/src/kz/cafe/client/rest/FEMessage.java new file mode 100644 index 0000000..75f6846 --- /dev/null +++ b/kz_cafe_client/src/kz/cafe/client/rest/FEMessage.java @@ -0,0 +1,129 @@ +package kz.cafe.client.rest; + +import javax.servlet.http.*; +import javax.ws.rs.*; +import javax.ws.rs.core.*; +import kz.cafe.client.*; +import kz.cafe.constants.*; +import kz.cafe.db.*; +import kz.cafe.db.model.*; +import kz.cafe.db.service.*; +import kz.cafe.utils.*; + + +@Path("/message") +public class FEMessage extends FEAbstractService{ + //private static Log log = LogFactory.getLog(FEFeedback.class); + + private static final String LOG = "[JR USER] "; + +// private UserSession4 session = null; + + + + + + public FEMessage(@Context HttpServletRequest hsr){ + super(ServiceRequestModel.buildUpponServlet(hsr), LOG); + } + + + + + + //--------------------------------------------------------------------------------------------- + //add new + //--------------------------------------------------------------------------------------------- + @GET + @Path("/system/new/{SID}/{lang}/{header}/{text}") + @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) + public JREmptyResponse newSystemMessage(@PathParam("SID") String SID, + @PathParam("lang") String sLang, + @PathParam("header") String sHeader, + @PathParam("text") String sText){ + JREmptyResponse response = new JREmptyResponse(); + + try{ + checkSession(SID); + //MUser mUser = MongoUserService.getUserProfile(UID); + + + MMessageSystem mMessageSystem = new MMessageSystem(); + mMessageSystem.ID = MongoService.getUniqueID(MMessageSystem.class); + mMessageSystem.fromUID = super.UID; + + for(InterfaceConstants.LANGS lang : InterfaceConstants.LANGS.values()){ + mMessageSystem.header.put(lang, sHeader); + mMessageSystem.text.put(lang, sText); + } + + MongoService.save(mMessageSystem); + + Mailer.sendMail(ServerConstants.getRobot(), + ServerConstants.getEmailAddressSystemAdmin(), + sHeader, + sText); + } + catch(Throwable e){ + response = new JREmptyResponse(e); + } + + updateStatistic(MAbstractStatistics.F_FEEDBACK_NEW); + super.responseTime(response); + return response; + } + + + + + + + + + + @GET + @Path("/cafe/new/{SID}/{CID}/{lang}/{header}/{text}") + @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) + public JREmptyResponse newFeedbacks(@PathParam("SID") String SID, + @PathParam("CID") int CID, + @PathParam("lang") String sLang, + @PathParam("header") String sHeader, + @PathParam("text") String sText){ + + + JREmptyResponse response = new JREmptyResponse(); + + try{ + checkSession(SID); + MUser mUser = MongoUserService.getUserProfile(UID); + + MCafe mCafe = MongoService.getExceptionable(MCafe.class, CID); + + MMessageCafe mMessageCafe = new MMessageCafe(); + mMessageCafe.ID = MongoService.getUniqueID(MMessageSystem.class); + mMessageCafe.fromUID = super.UID; + mMessageCafe.toCID = super.UID; + + + for(InterfaceConstants.LANGS lang : InterfaceConstants.LANGS.values()){ + mMessageCafe.header.put(lang, sHeader); + mMessageCafe.text.put(lang, sText); + } + + MongoService.save(mMessageCafe); + + MUser mCafeOwner = MongoUserService.getUserProfile(mCafe.ownerID); + + Mailer.sendMail(mUser.login, mCafeOwner.login, sHeader, sText); + } + catch(Throwable e){ + response = new JREmptyResponse(e); + } + + updateStatistic(MAbstractStatistics.F_FEEDBACK_NEW); + super.responseTime(response); + return response; + + } +} + diff --git a/kz_cafe_client/src/kz/cafe/client/rest/FENews.java b/kz_cafe_client/src/kz/cafe/client/rest/FENews.java new file mode 100644 index 0000000..163563c --- /dev/null +++ b/kz_cafe_client/src/kz/cafe/client/rest/FENews.java @@ -0,0 +1,71 @@ +package kz.cafe.client.rest; + +import java.util.*; +import javax.servlet.http.*; +import javax.ws.rs.*; +import javax.ws.rs.core.*; +import kz.cafe.client.*; +import kz.cafe.client.rest.wrappers.*; +import kz.cafe.constants.*; +import kz.cafe.db.*; +import kz.cafe.db.model.*; + + +@Path("/news") +public class FENews extends FEAbstractService{ +// private static Log log = LogFactory.getLog(FESale.class); + + private static final String LOG = "[JR SALE] "; + +// private UserSession4 session = null; + + + + + + public FENews(@Context HttpServletRequest hsr){ + super(ServiceRequestModel.buildUpponServlet(hsr), LOG); + } + + + + + + + + //--------------------------------------------------------------------------------------------- + //Sales + //--------------------------------------------------------------------------------------------- + @GET + @Path("/list/{LANG}/{TIME}") + @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) + @SuppressWarnings({ "unchecked" }) + public JRNewsListResponse getSales(@PathParam("LANG") String sLang, + @PathParam("TIME") long lTime){ + JRNewsListResponse response = new JRNewsListResponse(); + + try{ + InterfaceConstants.LANGS lang = validateLang(sLang); + + for(MNews mNews : (List) MongoService.getListFrontEnd(MNews.class, lTime)){ + if(response.checkDeleted(mNews)){ + JRNewsListResponse.JMItem item = response.add(); + item.fillIn(lang, mNews); + + item.CID = mNews.CID; + + item.date_notification = mNews.date_notification; + item.main_screen = mNews.showMainScreen; + item.news_screen = mNews.showNews; + } + } + } + catch(Throwable e){ + response = new JRNewsListResponse(e); + } + + updateStatistic(MAbstractStatistics.F_NEWS); + super.responseTime(response); + return response; + } +} \ No newline at end of file diff --git a/kz_cafe_client/src/kz/cafe/client/rest/FEPhone.java b/kz_cafe_client/src/kz/cafe/client/rest/FEPhone.java new file mode 100644 index 0000000..78b315d --- /dev/null +++ b/kz_cafe_client/src/kz/cafe/client/rest/FEPhone.java @@ -0,0 +1,63 @@ +package kz.cafe.client.rest; + +import java.util.*; +import javax.servlet.http.*; +import javax.ws.rs.*; +import javax.ws.rs.core.*; +import kz.cafe.client.*; +import kz.cafe.client.rest.wrappers.*; +import kz.cafe.constants.*; +import kz.cafe.db.*; +import kz.cafe.db.model.*; + + +@Path("/phone") +public class FEPhone extends FEAbstractService{ +// private static Log log = LogFactory.getLog(FESale.class); + + private static final String LOG = "[JR SALE] "; + + + + public FEPhone(@Context HttpServletRequest hsr){ + super(ServiceRequestModel.buildUpponServlet(hsr), LOG); + } + + + + + + + + //--------------------------------------------------------------------------------------------- + //Phones + //--------------------------------------------------------------------------------------------- + @GET + @Path("/list/{LANG}/{TIME}") + @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) + @SuppressWarnings({ "unchecked" }) + public JRPhoneListResponse getPhones(@PathParam("LANG") String sLang, + @PathParam("TIME") long lTime){ + JRPhoneListResponse response = new JRPhoneListResponse(); + + try{ + InterfaceConstants.LANGS lang = validateLang(sLang); + + for(MPhone mPhone : (List) MongoService.getListFrontEnd(MPhone.class, lTime)){ + if(response.checkDeleted(mPhone)){ + JRPhoneListResponse.JMItem item = response.add(); + item.fillIn(lang, mPhone); + + item.phone = mPhone.phone; + item.city = mPhone.city; + } + } + } + catch(Throwable e){ + response = new JRPhoneListResponse(e); + } + + super.responseTime(response); + return response; + } +} \ No newline at end of file diff --git a/kz_cafe_client/src/kz/cafe/client/rest/FESale.java b/kz_cafe_client/src/kz/cafe/client/rest/FESale.java new file mode 100644 index 0000000..9d71969 --- /dev/null +++ b/kz_cafe_client/src/kz/cafe/client/rest/FESale.java @@ -0,0 +1,74 @@ +package kz.cafe.client.rest; + +import java.util.*; +import javax.servlet.http.*; +import javax.ws.rs.*; +import javax.ws.rs.core.*; +import kz.cafe.client.*; +import kz.cafe.client.rest.wrappers.*; +import kz.cafe.constants.*; +import kz.cafe.db.*; +import kz.cafe.db.model.*; + + +@Path("/sale") +public class FESale extends FEAbstractService{ +// private static Log log = LogFactory.getLog(FESale.class); + + private static final String LOG = "[JR SALE] "; + +// private UserSession4 session = null; + + + + + + public FESale(@Context HttpServletRequest hsr){ + super(ServiceRequestModel.buildUpponServlet(hsr), LOG); + } + + + + + + + + //--------------------------------------------------------------------------------------------- + //Sales + //--------------------------------------------------------------------------------------------- + @GET + @Path("/list/{LANG}/{TIME}") + @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) + @SuppressWarnings({ "unchecked" }) + public JRSaleListResponse getSales(@PathParam("LANG") String sLang, + @PathParam("TIME") long lTime){ + JRSaleListResponse response = new JRSaleListResponse(); + + try{ + InterfaceConstants.LANGS lang = validateLang(sLang); + + for(MSale mSale : (List) MongoService.getListFrontEnd(MSale.class, lTime)){ + + if(response.checkDeleted(mSale)){ + JRSaleListResponse.JMItem item = response.add(); + item.fillIn(lang, mSale); + + item.CID = mSale.CID; + + item.date_from = mSale.date_from; + item.date_notification = mSale.date_notification; + item.date_to = mSale.date_to; + item.main_screen = mSale.showMainScreen; + item.news_screen = mSale.showNews; + } + } + } + catch(Throwable e){ + response = new JRSaleListResponse(e); + } + + updateStatistic(MAbstractStatistics.F_SALES); + super.responseTime(response); + return response; + } +} \ No newline at end of file diff --git a/kz_cafe_client/src/kz/cafe/client/rest/FESystem.java b/kz_cafe_client/src/kz/cafe/client/rest/FESystem.java new file mode 100644 index 0000000..1825771 --- /dev/null +++ b/kz_cafe_client/src/kz/cafe/client/rest/FESystem.java @@ -0,0 +1,59 @@ +package kz.cafe.client.rest; + +import java.util.*; +import javax.servlet.http.*; +import javax.ws.rs.*; +import javax.ws.rs.core.*; +import kz.cafe.client.*; +import kz.cafe.client.rest.wrappers.*; +import kz.cafe.constants.*; +import kz.cafe.db.*; +import kz.cafe.db.model.*; + +@Path("/system") +public class FESystem extends FEAbstractService{ + //private static Log log = LogFactory.getLog(FEAdmin.class); + + private static final String LOG = "[ADMIN] "; + + + + + + public FESystem(@Context HttpServletRequest hsr){ + super(ServiceRequestModel.buildUpponServlet(hsr), LOG); + } + + + + + + + @SuppressWarnings("unchecked") + @GET + @Path("/messages/{LANG}") + @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) + public JRDescriptorListResponse getI18N(@PathParam("LANG") String sLang){ + JRDescriptorListResponse response = new JRDescriptorListResponse(); + + try{ + InterfaceConstants.LANGS lang = validateLang(sLang); + + for(MAbstractDescriptor mAbstractDescriptor : + (List) MongoService.getListFrontEnd(MI18NClient.class, 0)){ + + if(response.checkDeleted(mAbstractDescriptor)){ + JRDescriptorListResponse.JMItem item = response.add(); + item.fillIn(lang, mAbstractDescriptor); + } + } + } + catch (Throwable e){ + response = new JRDescriptorListResponse(e); + } + + super.responseTime(response); + return response; + } + +} diff --git a/kz_cafe_client/src/kz/cafe/client/rest/FEUser.java b/kz_cafe_client/src/kz/cafe/client/rest/FEUser.java new file mode 100644 index 0000000..07edb1d --- /dev/null +++ b/kz_cafe_client/src/kz/cafe/client/rest/FEUser.java @@ -0,0 +1,425 @@ +package kz.cafe.client.rest; + +import java.io.*; +import javax.servlet.http.*; +import javax.ws.rs.*; +import javax.ws.rs.core.*; +import kz.cafe.client.*; +import kz.cafe.client.rest.wrappers.*; +import kz.cafe.constants.*; +import kz.cafe.db.*; +import kz.cafe.db.model.*; +import kz.cafe.db.service.*; +import kz.cafe.exceptions.*; +import kz.cafe.security.*; +import kz.cafe.utils.*; +import org.apache.commons.fileupload.util.*; +import org.apache.commons.logging.*; +import com.google.code.morphia.query.*; + + +@Path("/user") +public class FEUser extends FEAbstractService{ + //private static Log log = LogFactory.getLog(FEUser.class); + + private static final String LOG = "[JR USER] "; + +// private UserSession4 session = null; + + + + + + public FEUser(@Context HttpServletRequest hsr){ + super(ServiceRequestModel.buildUpponServlet(hsr), LOG); + } + + + + + + + + + + + + + + + + + + + + + + + + + + @GET + @Path("/new/{LOGIN}/{PASSWORD}/{LANG}/{NAME}/{PHONE}/{CITY}/{GENDER}/{BIGTHDATE}/{OS}/{DEVICE}") + @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) + public JRUserCreateResponse newUser(@PathParam("LOGIN") String sLogin, + @PathParam("PASSWORD") String sPassword, + @PathParam("LANG") final String sLang, + @PathParam("NAME") String sName, + @PathParam("PHONE") String sPhone, + @PathParam("CITY") int iCity, + @PathParam("GENDER") boolean bGender, + @PathParam("BIGTHDATE") long lDate, + @PathParam("OS") String OS, + @PathParam("DEVICE") String DEVICE){ + + JRUserCreateResponse response = new JRUserCreateResponse(); + + try{ + final MUser mUser = MongoUserService.createEmptyProfile(sLogin); + + mUser.login = sLogin; + mUser.password = sPassword; + + mUser.emailConfirmed = false; + + mUser.lang = validateLang(sLang); + + + mUser.name = sName; + mUser.phone = sPhone; + mUser.city = MongoService.getExceptionable(MCity.class, iCity).ID; + + mUser.gender = bGender; + + + mUser.birthdate = lDate; + + + updateDeviceInfo(mUser, OS, DEVICE); + uodateLoginTime(mUser); + + + + + MongoUserService.save(mUser); + + + final String sConfirmationCode = "" + new Long(mUser.login.hashCode()) * new Long(mUser.login.hashCode()); + MConfirmationCode mConfirmationCode = new MConfirmationCode(); + mConfirmationCode.code = sConfirmationCode; + mConfirmationCode.UID = mUser.ID; + MongoService.ds.save(mConfirmationCode); + + + Thread threadSendConfirmationMail = new Thread(){ + private final Log log = LogFactory.getLog(Thread.class); + private final String LOG = "[JR USER CONFIRMATION MAIL] "; + + public void run() { + try{ + InputStream is = ServerConstants.class.getResourceAsStream("/template_email_confirmation_" + sLang.toLowerCase() + ".txt"); + String sTemplate = Streams.asString(is); + sTemplate = sTemplate.replaceAll("%email%", mUser.login); + + sTemplate = sTemplate.replaceAll("%confirmation_link%", ServerConstants.getEmailConfirmationLink()+ "/" + sConfirmationCode); + + Mailer.sendMail(ServerConstants.getRobot(), + mUser.login, + "Email Confirmation", + sTemplate); + } + catch (IOException e){ + log.error(LOG, e); + } + } + }; + threadSendConfirmationMail.start(); + + + long SID = Sessions.open(mUser.ID); + + response.SID = super.long2sid(SID); + response.UID = mUser.ID; + + + updateStatistic(MAbstractStatistics.F_USER_NEW); + } + catch(Throwable e){ + response = new JRUserCreateResponse(e); + } + + super.responseTime(response); + return response; + } + + + + + + @GET + @Path("/email/confirm/{CODE}") + @Produces({ MediaType.TEXT_HTML}) + public String confirmEmail(@PathParam("CODE") String sCode){ + MConfirmationCode mConfirmationCode = MongoService.ds.find(MConfirmationCode.class, MConfirmationCode.F_CODE, sCode).get(); + + if(mConfirmationCode == null){ + return "wrong code"; + } + else{ + Query q =MongoService.ds.createQuery(MUser.class).filter(MUser.F_UID, mConfirmationCode.UID); + UpdateOperations uOps = MongoService.ds.createUpdateOperations(MUser.class).set(MUser.F_EMAIL_CONFIRMED, true); + MongoService.ds.findAndModify(q, uOps); + + + MongoService.ds.delete(MongoService.ds.createQuery(MConfirmationCode.class).filter(MConfirmationCode.F_CODE, mConfirmationCode.code)); + + + return "ok, confirmed."; + } + } + + + + + + + @GET + @Path("/login/{LOGIN}/{PASSWORD}/{OS}/{DEVICE}") + @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) + public JRUserLoginResponse login(@PathParam("LOGIN") String sLogin, + @PathParam("PASSWORD") String sPassword, + @PathParam("OS") String OS, + @PathParam("DEVICE") String DEVICE){ + JRUserLoginResponse response = new JRUserLoginResponse(); + + try{ + MUser mUser = MongoUserService.getUserProfile(sLogin); + + if(mUser.password.equals(sPassword)){ + long SID = Sessions.open(mUser.ID); + + response.UID = mUser.ID; + response.SID = super.long2sid(SID); + + updateDeviceInfo(mUser, OS, DEVICE); + uodateLoginTime(mUser); + + MongoUserService.save(mUser); + updateStatistic(MAbstractStatistics.F_LOGIN_SUCCESS); + } + else{ + throw new LoginFailedException(sLogin, sPassword); + } + } + catch(Throwable e){ + response = new JRUserLoginResponse(e); + } + + updateStatistic(MAbstractStatistics.F_LOGINS); + super.responseTime(response); + return response; + } + + + + + + @GET + @Path("/remove/{SID}/{PARAM}") + @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) + public JRUserCreateResponse updateUserRemoveValue(@PathParam("SID") String SID, + @PathParam("PARAM") String sParam){ + return updateUser(SID, sParam, ""); + } + + + + + + + @GET + @Path("/update/{SID}/{PARAM}/{VALUE}") + @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) + public JRUserCreateResponse updateUser(@PathParam("SID") String SID, + @PathParam("PARAM") String sParam, + @PathParam("VALUE") String sValue){ + + JRUserCreateResponse response = new JRUserCreateResponse(); + + try{ + checkSession(SID); + + MUser mUser = MongoUserService.getUserProfile(UID); + + + switch(sParam){ + case "password":{ + mUser.password = sValue; + + break; + } + case "lang":{ + mUser.lang = validateLang(sValue); + + break; + } + case "name":{ + mUser.name = sValue; + + break; + } + case "phone":{ + mUser.phone = sValue; + + break; + } + case "city":{ + if("".equals(sValue)) { + mUser.city = null; + } + else{ + mUser.city = MongoService.getExceptionable(MCity.class, Integer.parseInt(sValue)).ID; + } + + break; + } + case "avatar":{ + if("".equals(sValue)){ + mUser.image = null; + } + else{ + mUser.image = sValue; + } + + break; + } + case "gender":{ + mUser.gender = Boolean.parseBoolean(sValue); + + break; + } + + case "birthday":{ + mUser.birthdate = Long.parseLong(sValue); + + break; + } + } + + MongoUserService.save(mUser); + } + catch(Throwable e){ + response = new JRUserCreateResponse(e); + } + + super.responseTime(response); + return response; + } + + + + + + + + @GET + @Path("/profile/{SID}") + @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) + public JRUserProfileResponse getProfile(@PathParam("SID") String SID){ + + JRUserProfileResponse response = new JRUserProfileResponse(); + + try{ + checkSession(SID); + + MUser mUser = MongoUserService.getUserProfile(super.UID); + + response.birthdate = mUser.birthdate; + response.dateLatestLogin = mUser.dateLatestLogin; + response.dateRegistration = mUser.dateRegistration; + response.gender = mUser.gender; + response.lang = mUser.lang.name(); + response.name = mUser.name; + response.phone = mUser.phone; + response.city = mUser.city; + response.avatar = mUser.image; + + } + catch(Throwable e){ + response = new JRUserProfileResponse(e); + } + + super.responseTime(response); + return response; + } + + + + + + + @GET + @Path("/password/recovery/{lang}/{email}") + @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) + public JREmptyResponse password(@PathParam("lang") String sLang, + @PathParam("email") String sEmail){ + + JREmptyResponse response = new JREmptyResponse(); + + try{ + checkLanguage(sLang); + + MUser mUser = MongoUserService.getUserProfile(sEmail); + + InputStream is = ServerConstants.class.getResourceAsStream("/template_password_recovery_" + sLang.toLowerCase() + ".txt"); + String sTemplate = Streams.asString(is); + sTemplate = sTemplate.replaceAll("%login%", mUser.login); + sTemplate = sTemplate.replaceAll("%password%", mUser.password); + + Mailer.sendMail(ServerConstants.getRobot(), + sEmail, + "password", + sTemplate); + } + catch(Throwable e){ + response = new JREmptyResponse(e); + } + + super.responseTime(response); + return response; + } + + + + + + + + + + + + + + private static void updateDeviceInfo(MUser mUser, String OS, String DEVICE){ + MUser.Device device = new MUser.Device(DEVICE, OS); + + mUser.device = device; + + if(mUser.devices.contains(device)){ + } + else{ + mUser.devices.add(device); + } + } + + + + + + + private static void uodateLoginTime(MUser mUser){ + mUser.dateLatestLogin = System.currentTimeMillis(); + } +} + diff --git a/kz_cafe_client/src/kz/cafe/client/rest/wrappers/JMAbstractDataElement.java b/kz_cafe_client/src/kz/cafe/client/rest/wrappers/JMAbstractDataElement.java new file mode 100644 index 0000000..4cdbff4 --- /dev/null +++ b/kz_cafe_client/src/kz/cafe/client/rest/wrappers/JMAbstractDataElement.java @@ -0,0 +1,31 @@ +package kz.cafe.client.rest.wrappers; + +import kz.cafe.constants.*; +import kz.cafe.db.model.*; + +public class JMAbstractDataElement{ + + public Integer ID; + public Long created; + public Long updated; + public String deleted; + + + + public void fillIn(MAbstractEditableDataElement mAbstractDataElement){ + this.ID = mAbstractDataElement.ID; + this.created = mAbstractDataElement.created; + this.updated = mAbstractDataElement.updated; + } + + + + public String checkIsImageEmpty(String sImage){ + if(sImage == null || InterfaceConstants.EMPTY_IMAGE.equalsIgnoreCase(sImage)){ + return null; + } + else { + return sImage; + } + } +} diff --git a/kz_cafe_client/src/kz/cafe/client/rest/wrappers/JMAbstractDescriptor.java b/kz_cafe_client/src/kz/cafe/client/rest/wrappers/JMAbstractDescriptor.java new file mode 100644 index 0000000..17d5abf --- /dev/null +++ b/kz_cafe_client/src/kz/cafe/client/rest/wrappers/JMAbstractDescriptor.java @@ -0,0 +1,23 @@ +package kz.cafe.client.rest.wrappers; + +import kz.cafe.constants.*; +import kz.cafe.db.model.*; + +public class JMAbstractDescriptor extends JMAbstractDataElement{ + + public String name; + public String description; + public String image; + public int order; + + + + public void fillIn(InterfaceConstants.LANGS lang, MAbstractDescriptor mAbstractDescriptor){ + super.fillIn(mAbstractDescriptor); + + this.name = mAbstractDescriptor.name.get(lang); + this.description = mAbstractDescriptor.description.get(lang); + this.image = checkIsImageEmpty(mAbstractDescriptor.image); + this.order = mAbstractDescriptor.order; + } +} diff --git a/kz_cafe_client/src/kz/cafe/client/rest/wrappers/JRAbstractDeleteableResponse.java b/kz_cafe_client/src/kz/cafe/client/rest/wrappers/JRAbstractDeleteableResponse.java new file mode 100644 index 0000000..6681455 --- /dev/null +++ b/kz_cafe_client/src/kz/cafe/client/rest/wrappers/JRAbstractDeleteableResponse.java @@ -0,0 +1,52 @@ +package kz.cafe.client.rest.wrappers; + +import javax.xml.bind.annotation.*; +import kz.cafe.client.*; +import kz.cafe.db.model.*; + +public class JRAbstractDeleteableResponse extends JRAbstractResponse{ + + private StringBuilder sbDeleted = new StringBuilder(); + + @XmlElement(name="deleted") + public String getDeleted(){ + if(sbDeleted.length() == 0){ + return null; + } + else{ + return sbDeleted.toString(); + } + } + + + + + public boolean checkDeleted(MAbstractEditableDataElement mAbstractEditableDataElement){ + if(mAbstractEditableDataElement.deleted || !mAbstractEditableDataElement.published){ + if(sbDeleted.length() > 0){ + sbDeleted.append(","); + } + sbDeleted.append(mAbstractEditableDataElement.ID); + + return false; + } + else{ + return true; + } + } + + + + + public JRAbstractDeleteableResponse(){ + super(); + } + + + + + public JRAbstractDeleteableResponse(Throwable e){ + super(e); + // TODO Auto-generated constructor stub + } +} diff --git a/kz_cafe_client/src/kz/cafe/client/rest/wrappers/JRCafeImageListResponse.java b/kz_cafe_client/src/kz/cafe/client/rest/wrappers/JRCafeImageListResponse.java new file mode 100644 index 0000000..e3d9164 --- /dev/null +++ b/kz_cafe_client/src/kz/cafe/client/rest/wrappers/JRCafeImageListResponse.java @@ -0,0 +1,35 @@ +package kz.cafe.client.rest.wrappers; + +import java.util.*; +import javax.xml.bind.annotation.*; + +@XmlRootElement(name="response") +public class JRCafeImageListResponse extends JRAbstractDeleteableResponse{ + + @XmlElementWrapper(name="list") + @XmlElement(name="item") + public List list = new ArrayList(); + + + public JMItem add(){ + JMItem jmItem = new JMItem(); + list.add(jmItem); + + return jmItem; + } + + + public static class JMItem extends JMAbstractDescriptor{ + public Integer CID; + } + + + + public JRCafeImageListResponse(){ + } + + + public JRCafeImageListResponse(Throwable e){ + super(e); + } +} diff --git a/kz_cafe_client/src/kz/cafe/client/rest/wrappers/JRCafeListResponse.java b/kz_cafe_client/src/kz/cafe/client/rest/wrappers/JRCafeListResponse.java new file mode 100644 index 0000000..1343149 --- /dev/null +++ b/kz_cafe_client/src/kz/cafe/client/rest/wrappers/JRCafeListResponse.java @@ -0,0 +1,73 @@ +package kz.cafe.client.rest.wrappers; + +import java.util.*; +import javax.xml.bind.annotation.*; + +@XmlRootElement(name="response") +public class JRCafeListResponse extends JRAbstractDeleteableResponse{ + + @XmlElementWrapper(name="list") + @XmlElement(name="item") + public List list = new ArrayList(); + + + public JMItem add(){ + JMItem jmItem = new JMItem(); + list.add(jmItem); + + return jmItem; + } + + + public static class JMItem extends JMAbstractDescriptor{ + public Integer type; + public Integer rate; + public Integer price; + public int timeOpen; + public int timeClose; + public int timeOpenWeekend; + public int timeCloseWeekend; + public String phone; + public String address; + public String service; + public String coordinates; + public boolean hasDelivery; + public boolean hasReservation; + public String types; + public String requirements; + public String cuisines; + public Integer tables_total; + public Integer tables_free; + public Integer bill_average_min; + public Integer bill_average_max; + public Integer city; + public int timeCloseMo; + public int timeOpenMo; + public int timeCloseTu; + public int timeOpenTu; + public int timeCloseWe; + public int timeOpenWe; + public int timeCloseTh; + public int timeOpenTh; + public int timeCloseFr; + public int timeOpenFr; + public int timeCloseSa; + public int timeOpenSa; + public int timeCloseSu; + public int timeOpenSu; + public Integer timeOrdersFrom; + public Integer timeOrdersTo; + public Integer timeReservationFrom; + public Integer timeReservationTo; + } + + + + public JRCafeListResponse(){ + } + + + public JRCafeListResponse(Throwable e){ + super(e); + } +} diff --git a/kz_cafe_client/src/kz/cafe/client/rest/wrappers/JRCityListResponse.java b/kz_cafe_client/src/kz/cafe/client/rest/wrappers/JRCityListResponse.java new file mode 100644 index 0000000..cbc4ae3 --- /dev/null +++ b/kz_cafe_client/src/kz/cafe/client/rest/wrappers/JRCityListResponse.java @@ -0,0 +1,36 @@ +package kz.cafe.client.rest.wrappers; + +import java.util.*; +import javax.xml.bind.annotation.*; + +@XmlRootElement(name="response") +public class JRCityListResponse extends JRAbstractDeleteableResponse{ + + @XmlElementWrapper(name="list") + @XmlElement(name="item") + public List list = new ArrayList(); + + + public JMItem add(){ + JMItem jmItem = new JMItem(); + list.add(jmItem); + + return jmItem; + } + + + public static class JMItem extends JMAbstractDescriptor{ + public Integer GMT; + public boolean hasCafe; + } + + + + public JRCityListResponse(){ + } + + + public JRCityListResponse(Throwable e){ + super(e); + } +} diff --git a/kz_cafe_client/src/kz/cafe/client/rest/wrappers/JRCourseListResponse.java b/kz_cafe_client/src/kz/cafe/client/rest/wrappers/JRCourseListResponse.java new file mode 100644 index 0000000..6907361 --- /dev/null +++ b/kz_cafe_client/src/kz/cafe/client/rest/wrappers/JRCourseListResponse.java @@ -0,0 +1,40 @@ +package kz.cafe.client.rest.wrappers; + +import java.util.*; +import javax.xml.bind.annotation.*; + +@XmlRootElement(name="response") +public class JRCourseListResponse extends JRAbstractDeleteableResponse{ + + @XmlElementWrapper(name="list") + @XmlElement(name="item") + public List list = new ArrayList(); + + + public JMItem add(){ + JMItem jmItem = new JMItem(); + list.add(jmItem); + + return jmItem; + } + + + public static class JMItem extends JMAbstractDescriptor{ + public Integer category; + public Integer CID; + public Integer price; + public String ingredients; + public String weight; + public boolean delivery; + } + + + + public JRCourseListResponse(){ + } + + + public JRCourseListResponse(Throwable e){ + super(e); + } +} diff --git a/kz_cafe_client/src/kz/cafe/client/rest/wrappers/JRDescriptorListResponse.java b/kz_cafe_client/src/kz/cafe/client/rest/wrappers/JRDescriptorListResponse.java new file mode 100644 index 0000000..bee2fe4 --- /dev/null +++ b/kz_cafe_client/src/kz/cafe/client/rest/wrappers/JRDescriptorListResponse.java @@ -0,0 +1,36 @@ +package kz.cafe.client.rest.wrappers; + +import java.util.*; +import javax.xml.bind.annotation.*; + +@XmlRootElement(name="response") +public class JRDescriptorListResponse extends JRAbstractDeleteableResponse{ + + @XmlElementWrapper(name="list") + @XmlElement(name="item") + public List items = new ArrayList(); + + + + + public JMItem add(){ + JMItem jmItem = new JMItem(); + items.add(jmItem); + return jmItem; + } + + + + public static class JMItem extends JMAbstractDescriptor{ + } + + + + public JRDescriptorListResponse(){ + super(); + } + + public JRDescriptorListResponse(Throwable e){ + super(e); + } +} diff --git a/kz_cafe_client/src/kz/cafe/client/rest/wrappers/JRFeedbackListResponse.java b/kz_cafe_client/src/kz/cafe/client/rest/wrappers/JRFeedbackListResponse.java new file mode 100644 index 0000000..f9473f5 --- /dev/null +++ b/kz_cafe_client/src/kz/cafe/client/rest/wrappers/JRFeedbackListResponse.java @@ -0,0 +1,52 @@ +package kz.cafe.client.rest.wrappers; + +import java.util.*; +import javax.xml.bind.annotation.*; + + + +@XmlRootElement(name = "response") +public class JRFeedbackListResponse extends JRAbstractDeleteableResponse{ + + @XmlElementWrapper(name = "list") + @XmlElement(name = "item") + public List list = new ArrayList(); + + + + + + public JMItem add(){ + JMItem jmItem = new JMItem(); + list.add(jmItem); + + return jmItem; + } + + + + public static class JMItem extends JMAbstractDataElement{ + public Integer CID; + public Integer rate; + public String login; + public String name; + public String avatar; + public String text; + public String title; + } + + + + + + + + + + + public JRFeedbackListResponse(){ + } + public JRFeedbackListResponse(Throwable e){ + super(e); + } +} diff --git a/kz_cafe_client/src/kz/cafe/client/rest/wrappers/JRImageResponse.java b/kz_cafe_client/src/kz/cafe/client/rest/wrappers/JRImageResponse.java new file mode 100644 index 0000000..0501604 --- /dev/null +++ b/kz_cafe_client/src/kz/cafe/client/rest/wrappers/JRImageResponse.java @@ -0,0 +1,25 @@ +package kz.cafe.client.rest.wrappers; + +import javax.xml.bind.annotation.*; + +@XmlRootElement(name="response") +public class JRImageResponse extends JRAbstractDeleteableResponse{ + + public String image; + + + + + + public JRImageResponse(){ + super(); + } + + + + + + public JRImageResponse(Throwable e){ + super(e); + } +} diff --git a/kz_cafe_client/src/kz/cafe/client/rest/wrappers/JRNewOrderResponse.java b/kz_cafe_client/src/kz/cafe/client/rest/wrappers/JRNewOrderResponse.java new file mode 100644 index 0000000..8b00d14 --- /dev/null +++ b/kz_cafe_client/src/kz/cafe/client/rest/wrappers/JRNewOrderResponse.java @@ -0,0 +1,19 @@ +package kz.cafe.client.rest.wrappers; + +import javax.xml.bind.annotation.*; +import kz.cafe.client.*; + + +@XmlRootElement(name="response") +public class JRNewOrderResponse extends JRAbstractResponse{ + + public int OID; + + + public JRNewOrderResponse(){ + } + + public JRNewOrderResponse(Throwable e){ + super(e); + } +} diff --git a/kz_cafe_client/src/kz/cafe/client/rest/wrappers/JRNewsListResponse.java b/kz_cafe_client/src/kz/cafe/client/rest/wrappers/JRNewsListResponse.java new file mode 100644 index 0000000..8a9e0ad --- /dev/null +++ b/kz_cafe_client/src/kz/cafe/client/rest/wrappers/JRNewsListResponse.java @@ -0,0 +1,38 @@ +package kz.cafe.client.rest.wrappers; + +import java.util.*; +import javax.xml.bind.annotation.*; + +@XmlRootElement(name="response") +public class JRNewsListResponse extends JRAbstractDeleteableResponse{ + + @XmlElementWrapper(name="list") + @XmlElement(name="item") + public List list = new ArrayList(); + + + public JMItem add(){ + JMItem jmItem = new JMItem(); + list.add(jmItem); + + return jmItem; + } + + + public static class JMItem extends JMAbstractDescriptor{ + public Integer CID; + public long date_notification; + public Boolean main_screen; + public Boolean news_screen; + } + + + + public JRNewsListResponse(){ + } + + + public JRNewsListResponse(Throwable e){ + super(e); + } +} diff --git a/kz_cafe_client/src/kz/cafe/client/rest/wrappers/JROrderListResponse.java b/kz_cafe_client/src/kz/cafe/client/rest/wrappers/JROrderListResponse.java new file mode 100644 index 0000000..6f1402b --- /dev/null +++ b/kz_cafe_client/src/kz/cafe/client/rest/wrappers/JROrderListResponse.java @@ -0,0 +1,63 @@ +package kz.cafe.client.rest.wrappers; + +import java.util.*; +import javax.xml.bind.annotation.*; + +@XmlRootElement(name="response") +public class JROrderListResponse extends JRAbstractDeleteableResponse{ + + @XmlElementWrapper(name="orders") + @XmlElement(name="item") + public List items = new ArrayList(); + + + public JMOrder add(){ + JMOrder jmMenuItem = new JMOrder(); + items.add(jmMenuItem); + + return jmMenuItem; + } + + + + + public static class JMOrder{ + public Integer ID; + public Integer CID; + public Integer AID; + + + + @XmlElementWrapper(name="meals") + @XmlElement(name="item") + public List ingredients = new ArrayList(); + + + public JMMeal add(){ + JMMeal jmMeal = new JMMeal(); + ingredients.add(jmMeal); + + return jmMeal; + } + + + + public static class JMMeal{ + public long IID; + public int quantity; + } + } + + + + + + + public JROrderListResponse(){ + } + + + public JROrderListResponse(Throwable e){ + super(e); + } +} diff --git a/kz_cafe_client/src/kz/cafe/client/rest/wrappers/JRPhoneListResponse.java b/kz_cafe_client/src/kz/cafe/client/rest/wrappers/JRPhoneListResponse.java new file mode 100644 index 0000000..17a2dee --- /dev/null +++ b/kz_cafe_client/src/kz/cafe/client/rest/wrappers/JRPhoneListResponse.java @@ -0,0 +1,36 @@ +package kz.cafe.client.rest.wrappers; + +import java.util.*; +import javax.xml.bind.annotation.*; + +@XmlRootElement(name="response") +public class JRPhoneListResponse extends JRAbstractDeleteableResponse{ + + @XmlElementWrapper(name="list") + @XmlElement(name="item") + public List list = new ArrayList(); + + + public JMItem add(){ + JMItem jmItem = new JMItem(); + list.add(jmItem); + + return jmItem; + } + + + public static class JMItem extends JMAbstractDescriptor{ + public String phone; + public Integer city; + } + + + + public JRPhoneListResponse(){ + } + + + public JRPhoneListResponse(Throwable e){ + super(e); + } +} diff --git a/kz_cafe_client/src/kz/cafe/client/rest/wrappers/JRReserveListResponse.java b/kz_cafe_client/src/kz/cafe/client/rest/wrappers/JRReserveListResponse.java new file mode 100644 index 0000000..e6787a5 --- /dev/null +++ b/kz_cafe_client/src/kz/cafe/client/rest/wrappers/JRReserveListResponse.java @@ -0,0 +1,50 @@ +package kz.cafe.client.rest.wrappers; + +import java.util.*; +import javax.xml.bind.annotation.*; + + + +@XmlRootElement(name = "response") +public class JRReserveListResponse extends JRAbstractDeleteableResponse{ + + @XmlElementWrapper(name = "list") + @XmlElement(name = "item") + public List list = new ArrayList(); + + + + + + public JMItem add(){ + JMItem jmItem = new JMItem(); + list.add(jmItem); + + return jmItem; + } + + + + public static class JMItem extends JMAbstractDataElement{ + public Long date; + public Integer CID; + public Integer sits; + public String comment; + public Boolean confirmed; + } + + + + + + + + + + + public JRReserveListResponse(){ + } + public JRReserveListResponse(Throwable e){ + super(e); + } +} diff --git a/kz_cafe_client/src/kz/cafe/client/rest/wrappers/JRSaleListResponse.java b/kz_cafe_client/src/kz/cafe/client/rest/wrappers/JRSaleListResponse.java new file mode 100644 index 0000000..0e12e71 --- /dev/null +++ b/kz_cafe_client/src/kz/cafe/client/rest/wrappers/JRSaleListResponse.java @@ -0,0 +1,40 @@ +package kz.cafe.client.rest.wrappers; + +import java.util.*; +import javax.xml.bind.annotation.*; + +@XmlRootElement(name="response") +public class JRSaleListResponse extends JRAbstractDeleteableResponse{ + + @XmlElementWrapper(name="list") + @XmlElement(name="item") + public List list = new ArrayList(); + + + public JMItem add(){ + JMItem jmItem = new JMItem(); + list.add(jmItem); + + return jmItem; + } + + + public static class JMItem extends JMAbstractDescriptor{ + public int CID; + public long date_from; + public long date_to; + public long date_notification; + public Boolean main_screen; + public Boolean news_screen; + } + + + + public JRSaleListResponse(){ + } + + + public JRSaleListResponse(Throwable e){ + super(e); + } +} diff --git a/kz_cafe_client/src/kz/cafe/client/rest/wrappers/JRUserCreateResponse.java b/kz_cafe_client/src/kz/cafe/client/rest/wrappers/JRUserCreateResponse.java new file mode 100644 index 0000000..62cfa79 --- /dev/null +++ b/kz_cafe_client/src/kz/cafe/client/rest/wrappers/JRUserCreateResponse.java @@ -0,0 +1,19 @@ +package kz.cafe.client.rest.wrappers; + +import javax.xml.bind.annotation.*; +import kz.cafe.client.*; + + +@XmlRootElement(name="response") +public class JRUserCreateResponse extends JRAbstractResponse{ + + public String SID; + public Integer UID; + + public JRUserCreateResponse(){ + } + + public JRUserCreateResponse(Throwable e){ + super(e); + } +} diff --git a/kz_cafe_client/src/kz/cafe/client/rest/wrappers/JRUserLoginResponse.java b/kz_cafe_client/src/kz/cafe/client/rest/wrappers/JRUserLoginResponse.java new file mode 100644 index 0000000..31aab11 --- /dev/null +++ b/kz_cafe_client/src/kz/cafe/client/rest/wrappers/JRUserLoginResponse.java @@ -0,0 +1,19 @@ +package kz.cafe.client.rest.wrappers; + +import javax.xml.bind.annotation.*; +import kz.cafe.client.*; + + +@XmlRootElement(name="response") +public class JRUserLoginResponse extends JRAbstractResponse{ + + public String SID; + public Integer UID; + + public JRUserLoginResponse(){ + } + + public JRUserLoginResponse(Throwable e){ + super(e); + } +} diff --git a/kz_cafe_client/src/kz/cafe/client/rest/wrappers/JRUserProfileResponse.java b/kz_cafe_client/src/kz/cafe/client/rest/wrappers/JRUserProfileResponse.java new file mode 100644 index 0000000..0435f32 --- /dev/null +++ b/kz_cafe_client/src/kz/cafe/client/rest/wrappers/JRUserProfileResponse.java @@ -0,0 +1,33 @@ +package kz.cafe.client.rest.wrappers; + +import javax.xml.bind.annotation.*; +import kz.cafe.client.*; + + +@XmlRootElement(name="response") +public class JRUserProfileResponse extends JRAbstractResponse{ + + public Long UID; + public String lang; + + public String name; + public String phone; + public Integer city; + public String avatar; + + public Boolean gender; + + public Long birthdate; + + public Long dateRegistration; + public Long dateLatestLogin; + + + + public JRUserProfileResponse(){ + } + + public JRUserProfileResponse(Throwable e){ + super(e); + } +} diff --git a/kz_cafe_client/src/kz/cafe/security/Adresses.java b/kz_cafe_client/src/kz/cafe/security/Adresses.java new file mode 100644 index 0000000..d8045a1 --- /dev/null +++ b/kz_cafe_client/src/kz/cafe/security/Adresses.java @@ -0,0 +1,10 @@ +package kz.cafe.security; + +import java.net.*; +import java.util.*; + +public final class Adresses{ + + public Map mapIPes = new HashMap(); + +} diff --git a/kz_cafe_client/src/kz/cafe/security/Sessions.java b/kz_cafe_client/src/kz/cafe/security/Sessions.java new file mode 100644 index 0000000..6ea1687 --- /dev/null +++ b/kz_cafe_client/src/kz/cafe/security/Sessions.java @@ -0,0 +1,110 @@ +package kz.cafe.security; + +import java.util.*; +import java.util.concurrent.locks.*; +import org.apache.commons.logging.*; +import kz.cafe.exceptions.*; + +public final class Sessions{ + private static Log log = LogFactory.getLog(Sessions.class); + + private static final String LOG = "[SESSIONS] "; + + + //SESSION, UID + public static final Map mapS2U = new HashMap(); + + //UID, SESSION + public static final Map mapU2S = new HashMap(); + + + + private static final ReentrantLock LOCK = new ReentrantLock(); + + + + + public static long open(int UID){ + log.info(LOG + "Let's open a new session for UID=" + UID); + + closeSessionUID(UID); + + LOCK.lock(); + try{ + while(true){ + long SID = (long) (Math.random() * Long.MAX_VALUE); + + if(mapS2U.containsKey(SID)){ + continue; + } + + mapS2U.put(SID, UID); + mapU2S.put(UID, SID); + + log.info(LOG + "UID=" + UID + " now runs the SID=" + SID); + + return SID; + } + } + finally{ + LOCK.unlock(); + } + } + + + + + + + + + public static int getUID(long SID) throws AbstractSecurityException{ + LOCK.lock(); + + try{ + Integer UID = mapS2U.get(SID); + + if(UID == null){ + throw new SessionNotFoundException("" + SID); + } + + log.debug(LOG + "SID=" + SID + " is UID=" + UID); + + return UID; + } + finally{ + LOCK.unlock(); + } + } + + + + + + public static void closeSessionSID(long SID){ + LOCK.lock(); + + try{ + Integer UID = mapS2U.get(SID); + + mapS2U.remove(SID); + mapU2S.remove(UID); + } + finally{ + LOCK.unlock(); + } + } + public static void closeSessionUID(long UID){ + LOCK.lock(); + + try{ + Long SID = mapU2S.get(UID); + + mapS2U.remove(SID); + mapU2S.remove(UID); + } + finally{ + LOCK.unlock(); + } + } +} diff --git a/kz_cafe_client/src/kz/cafe/statistics/ClientCounters.java b/kz_cafe_client/src/kz/cafe/statistics/ClientCounters.java new file mode 100644 index 0000000..a265fbf --- /dev/null +++ b/kz_cafe_client/src/kz/cafe/statistics/ClientCounters.java @@ -0,0 +1,38 @@ +package kz.cafe.statistics; + +import java.util.concurrent.*; +import java.util.concurrent.atomic.*; + +public class ClientCounters{ + + public static final ConcurrentHashMap, AtomicLong> mapSumTime = + new ConcurrentHashMap, AtomicLong>(); + + + public static final ConcurrentHashMap, AtomicLong> mapRequestCountes = + new ConcurrentHashMap, AtomicLong>(); + + + + public static void addRequestTime(Class agent, long time){ + AtomicLong atomlSumTime = mapSumTime.get(agent); + + if(atomlSumTime == null){ + atomlSumTime = new AtomicLong(0); + mapSumTime.put(agent, atomlSumTime); + } + + atomlSumTime.addAndGet(time); + + + + AtomicLong atomlRequestCounter = mapRequestCountes.get(agent); + + if(atomlRequestCounter == null){ + atomlRequestCounter = new AtomicLong(0); + mapRequestCountes.put(agent, atomlRequestCounter); + } + + atomlRequestCounter.incrementAndGet(); + } +} diff --git a/kz_cafe_core/.classpath b/kz_cafe_core/.classpath new file mode 100644 index 0000000..edeffd8 --- /dev/null +++ b/kz_cafe_core/.classpath @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kz_cafe_core/.project b/kz_cafe_core/.project new file mode 100644 index 0000000..603d2d8 --- /dev/null +++ b/kz_cafe_core/.project @@ -0,0 +1,30 @@ + + + kz_cafe_core + + + + + + org.eclipse.wst.common.project.facet.core.builder + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.wst.validation.validationbuilder + + + + + + org.eclipse.jem.workbench.JavaEMFNature + org.eclipse.wst.common.modulecore.ModuleCoreNature + org.eclipse.jdt.core.javanature + org.eclipse.wst.common.project.facet.core.nature + + diff --git a/kz_cafe_core/.settings/org.eclipse.jdt.core.prefs b/kz_cafe_core/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..838bd9d --- /dev/null +++ b/kz_cafe_core/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,11 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.7 diff --git a/kz_cafe_core/.settings/org.eclipse.wst.common.component b/kz_cafe_core/.settings/org.eclipse.wst.common.component new file mode 100644 index 0000000..23fb5b1 --- /dev/null +++ b/kz_cafe_core/.settings/org.eclipse.wst.common.component @@ -0,0 +1,5 @@ + + + + + diff --git a/kz_cafe_core/.settings/org.eclipse.wst.common.project.facet.core.xml b/kz_cafe_core/.settings/org.eclipse.wst.common.project.facet.core.xml new file mode 100644 index 0000000..f1b8524 --- /dev/null +++ b/kz_cafe_core/.settings/org.eclipse.wst.common.project.facet.core.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/kz_cafe_core/auxilary_items/images/0.png b/kz_cafe_core/auxilary_items/images/0.png new file mode 100644 index 0000000..8ccea48 Binary files /dev/null and b/kz_cafe_core/auxilary_items/images/0.png differ diff --git a/kz_cafe_core/auxilary_items/images/0_.png b/kz_cafe_core/auxilary_items/images/0_.png new file mode 100644 index 0000000..04b07a5 Binary files /dev/null and b/kz_cafe_core/auxilary_items/images/0_.png differ diff --git a/kz_cafe_core/auxilary_items/images/descript.ion b/kz_cafe_core/auxilary_items/images/descript.ion new file mode 100644 index 0000000..cf8546d --- /dev/null +++ b/kz_cafe_core/auxilary_items/images/descript.ion @@ -0,0 +1 @@ +Plase put these files to image folder diff --git a/kz_cafe_core/auxilary_items/images/spacer.gif b/kz_cafe_core/auxilary_items/images/spacer.gif new file mode 100644 index 0000000..1d9a4f5 Binary files /dev/null and b/kz_cafe_core/auxilary_items/images/spacer.gif differ diff --git a/kz_cafe_core/bin/META-INF/MANIFEST.MF b/kz_cafe_core/bin/META-INF/MANIFEST.MF new file mode 100644 index 0000000..5e94951 --- /dev/null +++ b/kz_cafe_core/bin/META-INF/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Class-Path: + diff --git a/kz_cafe_core/bin/kz/cafe/DbExport.class b/kz_cafe_core/bin/kz/cafe/DbExport.class new file mode 100644 index 0000000..fb2eac3 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/DbExport.class differ diff --git a/kz_cafe_core/bin/kz/cafe/Export.class b/kz_cafe_core/bin/kz/cafe/Export.class new file mode 100644 index 0000000..f3a85ca Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/Export.class differ diff --git a/kz_cafe_core/bin/kz/cafe/FuckFeedbacks.class b/kz_cafe_core/bin/kz/cafe/FuckFeedbacks.class new file mode 100644 index 0000000..0ba4387 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/FuckFeedbacks.class differ diff --git a/kz_cafe_core/bin/kz/cafe/InitAdmin.class b/kz_cafe_core/bin/kz/cafe/InitAdmin.class new file mode 100644 index 0000000..029fec9 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/InitAdmin.class differ diff --git a/kz_cafe_core/bin/kz/cafe/TestMassLoad.class b/kz_cafe_core/bin/kz/cafe/TestMassLoad.class new file mode 100644 index 0000000..1e7c62b Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/TestMassLoad.class differ diff --git a/kz_cafe_core/bin/kz/cafe/TestMassLoad_Dedicated.class b/kz_cafe_core/bin/kz/cafe/TestMassLoad_Dedicated.class new file mode 100644 index 0000000..0780e3c Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/TestMassLoad_Dedicated.class differ diff --git a/kz_cafe_core/bin/kz/cafe/cache/OnePassCache.class b/kz_cafe_core/bin/kz/cafe/cache/OnePassCache.class new file mode 100644 index 0000000..96c89b0 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/cache/OnePassCache.class differ diff --git a/kz_cafe_core/bin/kz/cafe/constants/InterfaceConstants$LANGS.class b/kz_cafe_core/bin/kz/cafe/constants/InterfaceConstants$LANGS.class new file mode 100644 index 0000000..57cc253 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/constants/InterfaceConstants$LANGS.class differ diff --git a/kz_cafe_core/bin/kz/cafe/constants/InterfaceConstants.class b/kz_cafe_core/bin/kz/cafe/constants/InterfaceConstants.class new file mode 100644 index 0000000..7ab316e Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/constants/InterfaceConstants.class differ diff --git a/kz_cafe_core/bin/kz/cafe/constants/LogConstants.class b/kz_cafe_core/bin/kz/cafe/constants/LogConstants.class new file mode 100644 index 0000000..1b0f7be Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/constants/LogConstants.class differ diff --git a/kz_cafe_core/bin/kz/cafe/constants/OperationConstants.class b/kz_cafe_core/bin/kz/cafe/constants/OperationConstants.class new file mode 100644 index 0000000..2b0a2f8 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/constants/OperationConstants.class differ diff --git a/kz_cafe_core/bin/kz/cafe/constants/OrderConstants$STATUS.class b/kz_cafe_core/bin/kz/cafe/constants/OrderConstants$STATUS.class new file mode 100644 index 0000000..fa5a98a Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/constants/OrderConstants$STATUS.class differ diff --git a/kz_cafe_core/bin/kz/cafe/constants/OrderConstants.class b/kz_cafe_core/bin/kz/cafe/constants/OrderConstants.class new file mode 100644 index 0000000..f281879 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/constants/OrderConstants.class differ diff --git a/kz_cafe_core/bin/kz/cafe/constants/ServerConstants.class b/kz_cafe_core/bin/kz/cafe/constants/ServerConstants.class new file mode 100644 index 0000000..b0a1c4d Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/constants/ServerConstants.class differ diff --git a/kz_cafe_core/bin/kz/cafe/db/Constraint$Criterion.class b/kz_cafe_core/bin/kz/cafe/db/Constraint$Criterion.class new file mode 100644 index 0000000..8361498 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/db/Constraint$Criterion.class differ diff --git a/kz_cafe_core/bin/kz/cafe/db/Constraint.class b/kz_cafe_core/bin/kz/cafe/db/Constraint.class new file mode 100644 index 0000000..480ab81 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/db/Constraint.class differ diff --git a/kz_cafe_core/bin/kz/cafe/db/MongoService.class b/kz_cafe_core/bin/kz/cafe/db/MongoService.class new file mode 100644 index 0000000..81bfe00 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/db/MongoService.class differ diff --git a/kz_cafe_core/bin/kz/cafe/db/logs/MongoLogService.class b/kz_cafe_core/bin/kz/cafe/db/logs/MongoLogService.class new file mode 100644 index 0000000..4f0006c Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/db/logs/MongoLogService.class differ diff --git a/kz_cafe_core/bin/kz/cafe/db/logs/model/MLogBody.class b/kz_cafe_core/bin/kz/cafe/db/logs/model/MLogBody.class new file mode 100644 index 0000000..3ee6eed Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/db/logs/model/MLogBody.class differ diff --git a/kz_cafe_core/bin/kz/cafe/db/logs/model/MLogHeader.class b/kz_cafe_core/bin/kz/cafe/db/logs/model/MLogHeader.class new file mode 100644 index 0000000..9498a01 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/db/logs/model/MLogHeader.class differ diff --git a/kz_cafe_core/bin/kz/cafe/db/model/MAbstractDataElement.class b/kz_cafe_core/bin/kz/cafe/db/model/MAbstractDataElement.class new file mode 100644 index 0000000..1945bcc Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/db/model/MAbstractDataElement.class differ diff --git a/kz_cafe_core/bin/kz/cafe/db/model/MAbstractDescriptor.class b/kz_cafe_core/bin/kz/cafe/db/model/MAbstractDescriptor.class new file mode 100644 index 0000000..dcab745 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/db/model/MAbstractDescriptor.class differ diff --git a/kz_cafe_core/bin/kz/cafe/db/model/MAbstractEditableDataElement.class b/kz_cafe_core/bin/kz/cafe/db/model/MAbstractEditableDataElement.class new file mode 100644 index 0000000..c5c0bd0 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/db/model/MAbstractEditableDataElement.class differ diff --git a/kz_cafe_core/bin/kz/cafe/db/model/MAbstractMessage.class b/kz_cafe_core/bin/kz/cafe/db/model/MAbstractMessage.class new file mode 100644 index 0000000..b866f64 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/db/model/MAbstractMessage.class differ diff --git a/kz_cafe_core/bin/kz/cafe/db/model/MAbstractStatistics.class b/kz_cafe_core/bin/kz/cafe/db/model/MAbstractStatistics.class new file mode 100644 index 0000000..3a2c2e0 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/db/model/MAbstractStatistics.class differ diff --git a/kz_cafe_core/bin/kz/cafe/db/model/MCafe.class b/kz_cafe_core/bin/kz/cafe/db/model/MCafe.class new file mode 100644 index 0000000..e814ae4 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/db/model/MCafe.class differ diff --git a/kz_cafe_core/bin/kz/cafe/db/model/MCafeImage.class b/kz_cafe_core/bin/kz/cafe/db/model/MCafeImage.class new file mode 100644 index 0000000..b51275d Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/db/model/MCafeImage.class differ diff --git a/kz_cafe_core/bin/kz/cafe/db/model/MCafeType.class b/kz_cafe_core/bin/kz/cafe/db/model/MCafeType.class new file mode 100644 index 0000000..f6f8acb Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/db/model/MCafeType.class differ diff --git a/kz_cafe_core/bin/kz/cafe/db/model/MCity.class b/kz_cafe_core/bin/kz/cafe/db/model/MCity.class new file mode 100644 index 0000000..86c3d1b Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/db/model/MCity.class differ diff --git a/kz_cafe_core/bin/kz/cafe/db/model/MConfirmationCode.class b/kz_cafe_core/bin/kz/cafe/db/model/MConfirmationCode.class new file mode 100644 index 0000000..7bf2097 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/db/model/MConfirmationCode.class differ diff --git a/kz_cafe_core/bin/kz/cafe/db/model/MCounterModel.class b/kz_cafe_core/bin/kz/cafe/db/model/MCounterModel.class new file mode 100644 index 0000000..b421c89 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/db/model/MCounterModel.class differ diff --git a/kz_cafe_core/bin/kz/cafe/db/model/MCounterRequests.class b/kz_cafe_core/bin/kz/cafe/db/model/MCounterRequests.class new file mode 100644 index 0000000..c04cc80 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/db/model/MCounterRequests.class differ diff --git a/kz_cafe_core/bin/kz/cafe/db/model/MCourse.class b/kz_cafe_core/bin/kz/cafe/db/model/MCourse.class new file mode 100644 index 0000000..f509cec Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/db/model/MCourse.class differ diff --git a/kz_cafe_core/bin/kz/cafe/db/model/MCourseCategory.class b/kz_cafe_core/bin/kz/cafe/db/model/MCourseCategory.class new file mode 100644 index 0000000..3145aa0 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/db/model/MCourseCategory.class differ diff --git a/kz_cafe_core/bin/kz/cafe/db/model/MCuisine.class b/kz_cafe_core/bin/kz/cafe/db/model/MCuisine.class new file mode 100644 index 0000000..bf4124a Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/db/model/MCuisine.class differ diff --git a/kz_cafe_core/bin/kz/cafe/db/model/MFaceControl.class b/kz_cafe_core/bin/kz/cafe/db/model/MFaceControl.class new file mode 100644 index 0000000..8f53397 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/db/model/MFaceControl.class differ diff --git a/kz_cafe_core/bin/kz/cafe/db/model/MFeedback.class b/kz_cafe_core/bin/kz/cafe/db/model/MFeedback.class new file mode 100644 index 0000000..224e8eb Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/db/model/MFeedback.class differ diff --git a/kz_cafe_core/bin/kz/cafe/db/model/MI18NClient.class b/kz_cafe_core/bin/kz/cafe/db/model/MI18NClient.class new file mode 100644 index 0000000..6fa5ec4 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/db/model/MI18NClient.class differ diff --git a/kz_cafe_core/bin/kz/cafe/db/model/MImage.class b/kz_cafe_core/bin/kz/cafe/db/model/MImage.class new file mode 100644 index 0000000..6075d1d Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/db/model/MImage.class differ diff --git a/kz_cafe_core/bin/kz/cafe/db/model/MIngredient.class b/kz_cafe_core/bin/kz/cafe/db/model/MIngredient.class new file mode 100644 index 0000000..4ebebc9 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/db/model/MIngredient.class differ diff --git a/kz_cafe_core/bin/kz/cafe/db/model/MLog.class b/kz_cafe_core/bin/kz/cafe/db/model/MLog.class new file mode 100644 index 0000000..2cbd7a6 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/db/model/MLog.class differ diff --git a/kz_cafe_core/bin/kz/cafe/db/model/MMessageCafe.class b/kz_cafe_core/bin/kz/cafe/db/model/MMessageCafe.class new file mode 100644 index 0000000..221cd48 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/db/model/MMessageCafe.class differ diff --git a/kz_cafe_core/bin/kz/cafe/db/model/MMessageSystem.class b/kz_cafe_core/bin/kz/cafe/db/model/MMessageSystem.class new file mode 100644 index 0000000..5db6d31 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/db/model/MMessageSystem.class differ diff --git a/kz_cafe_core/bin/kz/cafe/db/model/MNews.class b/kz_cafe_core/bin/kz/cafe/db/model/MNews.class new file mode 100644 index 0000000..75daed9 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/db/model/MNews.class differ diff --git a/kz_cafe_core/bin/kz/cafe/db/model/MOrder.class b/kz_cafe_core/bin/kz/cafe/db/model/MOrder.class new file mode 100644 index 0000000..a5d6a79 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/db/model/MOrder.class differ diff --git a/kz_cafe_core/bin/kz/cafe/db/model/MOrderItem.class b/kz_cafe_core/bin/kz/cafe/db/model/MOrderItem.class new file mode 100644 index 0000000..228c6d2 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/db/model/MOrderItem.class differ diff --git a/kz_cafe_core/bin/kz/cafe/db/model/MPhone.class b/kz_cafe_core/bin/kz/cafe/db/model/MPhone.class new file mode 100644 index 0000000..c4a5bf9 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/db/model/MPhone.class differ diff --git a/kz_cafe_core/bin/kz/cafe/db/model/MReservation.class b/kz_cafe_core/bin/kz/cafe/db/model/MReservation.class new file mode 100644 index 0000000..cfef207 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/db/model/MReservation.class differ diff --git a/kz_cafe_core/bin/kz/cafe/db/model/MRole.class b/kz_cafe_core/bin/kz/cafe/db/model/MRole.class new file mode 100644 index 0000000..1df1e02 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/db/model/MRole.class differ diff --git a/kz_cafe_core/bin/kz/cafe/db/model/MSale.class b/kz_cafe_core/bin/kz/cafe/db/model/MSale.class new file mode 100644 index 0000000..5ee9b71 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/db/model/MSale.class differ diff --git a/kz_cafe_core/bin/kz/cafe/db/model/MServiceType.class b/kz_cafe_core/bin/kz/cafe/db/model/MServiceType.class new file mode 100644 index 0000000..0543f58 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/db/model/MServiceType.class differ diff --git a/kz_cafe_core/bin/kz/cafe/db/model/MStatisticDate.class b/kz_cafe_core/bin/kz/cafe/db/model/MStatisticDate.class new file mode 100644 index 0000000..2c1b6e8 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/db/model/MStatisticDate.class differ diff --git a/kz_cafe_core/bin/kz/cafe/db/model/MStatisticIP.class b/kz_cafe_core/bin/kz/cafe/db/model/MStatisticIP.class new file mode 100644 index 0000000..26b1d15 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/db/model/MStatisticIP.class differ diff --git a/kz_cafe_core/bin/kz/cafe/db/model/MUser$Device.class b/kz_cafe_core/bin/kz/cafe/db/model/MUser$Device.class new file mode 100644 index 0000000..54ea16e Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/db/model/MUser$Device.class differ diff --git a/kz_cafe_core/bin/kz/cafe/db/model/MUser.class b/kz_cafe_core/bin/kz/cafe/db/model/MUser.class new file mode 100644 index 0000000..a6c171e Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/db/model/MUser.class differ diff --git a/kz_cafe_core/bin/kz/cafe/db/model/anotations/AnnotationDate.class b/kz_cafe_core/bin/kz/cafe/db/model/anotations/AnnotationDate.class new file mode 100644 index 0000000..91c158f Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/db/model/anotations/AnnotationDate.class differ diff --git a/kz_cafe_core/bin/kz/cafe/db/model/anotations/AnnotationExport.class b/kz_cafe_core/bin/kz/cafe/db/model/anotations/AnnotationExport.class new file mode 100644 index 0000000..a86d078 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/db/model/anotations/AnnotationExport.class differ diff --git a/kz_cafe_core/bin/kz/cafe/db/model/anotations/AnnotationID.class b/kz_cafe_core/bin/kz/cafe/db/model/anotations/AnnotationID.class new file mode 100644 index 0000000..8658dcf Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/db/model/anotations/AnnotationID.class differ diff --git a/kz_cafe_core/bin/kz/cafe/db/model/anotations/AnnotationImage.class b/kz_cafe_core/bin/kz/cafe/db/model/anotations/AnnotationImage.class new file mode 100644 index 0000000..f4ef4e0 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/db/model/anotations/AnnotationImage.class differ diff --git a/kz_cafe_core/bin/kz/cafe/db/model/anotations/AnnotationIncusiveList.class b/kz_cafe_core/bin/kz/cafe/db/model/anotations/AnnotationIncusiveList.class new file mode 100644 index 0000000..2b5ef56 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/db/model/anotations/AnnotationIncusiveList.class differ diff --git a/kz_cafe_core/bin/kz/cafe/db/model/anotations/AnnotationIncusiveListManual.class b/kz_cafe_core/bin/kz/cafe/db/model/anotations/AnnotationIncusiveListManual.class new file mode 100644 index 0000000..291f0e1 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/db/model/anotations/AnnotationIncusiveListManual.class differ diff --git a/kz_cafe_core/bin/kz/cafe/db/model/anotations/AnnotationMultiLangString.class b/kz_cafe_core/bin/kz/cafe/db/model/anotations/AnnotationMultiLangString.class new file mode 100644 index 0000000..8e416f3 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/db/model/anotations/AnnotationMultiLangString.class differ diff --git a/kz_cafe_core/bin/kz/cafe/db/model/anotations/AnnotationNoExportIndex.class b/kz_cafe_core/bin/kz/cafe/db/model/anotations/AnnotationNoExportIndex.class new file mode 100644 index 0000000..487b269 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/db/model/anotations/AnnotationNoExportIndex.class differ diff --git a/kz_cafe_core/bin/kz/cafe/db/model/anotations/AnnotationNotExported.class b/kz_cafe_core/bin/kz/cafe/db/model/anotations/AnnotationNotExported.class new file mode 100644 index 0000000..bfa208d Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/db/model/anotations/AnnotationNotExported.class differ diff --git a/kz_cafe_core/bin/kz/cafe/db/model/anotations/AnnotationPrice.class b/kz_cafe_core/bin/kz/cafe/db/model/anotations/AnnotationPrice.class new file mode 100644 index 0000000..6403248 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/db/model/anotations/AnnotationPrice.class differ diff --git a/kz_cafe_core/bin/kz/cafe/db/model/anotations/AnnotationRelated.class b/kz_cafe_core/bin/kz/cafe/db/model/anotations/AnnotationRelated.class new file mode 100644 index 0000000..434d5d4 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/db/model/anotations/AnnotationRelated.class differ diff --git a/kz_cafe_core/bin/kz/cafe/db/model/anotations/AnnotationTime.class b/kz_cafe_core/bin/kz/cafe/db/model/anotations/AnnotationTime.class new file mode 100644 index 0000000..90e0665 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/db/model/anotations/AnnotationTime.class differ diff --git a/kz_cafe_core/bin/kz/cafe/db/service/MongoFeedbackService.class b/kz_cafe_core/bin/kz/cafe/db/service/MongoFeedbackService.class new file mode 100644 index 0000000..ff1d646 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/db/service/MongoFeedbackService.class differ diff --git a/kz_cafe_core/bin/kz/cafe/db/service/MongoOrderService.class b/kz_cafe_core/bin/kz/cafe/db/service/MongoOrderService.class new file mode 100644 index 0000000..7016c2f Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/db/service/MongoOrderService.class differ diff --git a/kz_cafe_core/bin/kz/cafe/db/service/MongoUserService.class b/kz_cafe_core/bin/kz/cafe/db/service/MongoUserService.class new file mode 100644 index 0000000..b231df6 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/db/service/MongoUserService.class differ diff --git a/kz_cafe_core/bin/kz/cafe/exceptions/AbstractException.class b/kz_cafe_core/bin/kz/cafe/exceptions/AbstractException.class new file mode 100644 index 0000000..79c8ad6 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/exceptions/AbstractException.class differ diff --git a/kz_cafe_core/bin/kz/cafe/exceptions/AbstractSecurityException.class b/kz_cafe_core/bin/kz/cafe/exceptions/AbstractSecurityException.class new file mode 100644 index 0000000..f75bc46 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/exceptions/AbstractSecurityException.class differ diff --git a/kz_cafe_core/bin/kz/cafe/exceptions/AccessDeniedException.class b/kz_cafe_core/bin/kz/cafe/exceptions/AccessDeniedException.class new file mode 100644 index 0000000..3cf0577 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/exceptions/AccessDeniedException.class differ diff --git a/kz_cafe_core/bin/kz/cafe/exceptions/BadDataException.class b/kz_cafe_core/bin/kz/cafe/exceptions/BadDataException.class new file mode 100644 index 0000000..5881b28 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/exceptions/BadDataException.class differ diff --git a/kz_cafe_core/bin/kz/cafe/exceptions/DuplcateLoginException.class b/kz_cafe_core/bin/kz/cafe/exceptions/DuplcateLoginException.class new file mode 100644 index 0000000..ca8dd87 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/exceptions/DuplcateLoginException.class differ diff --git a/kz_cafe_core/bin/kz/cafe/exceptions/LangNotSupportedException.class b/kz_cafe_core/bin/kz/cafe/exceptions/LangNotSupportedException.class new file mode 100644 index 0000000..4ead776 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/exceptions/LangNotSupportedException.class differ diff --git a/kz_cafe_core/bin/kz/cafe/exceptions/LoginFailedException.class b/kz_cafe_core/bin/kz/cafe/exceptions/LoginFailedException.class new file mode 100644 index 0000000..be9f0bc Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/exceptions/LoginFailedException.class differ diff --git a/kz_cafe_core/bin/kz/cafe/exceptions/LoginNotFoundException.class b/kz_cafe_core/bin/kz/cafe/exceptions/LoginNotFoundException.class new file mode 100644 index 0000000..8581bf8 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/exceptions/LoginNotFoundException.class differ diff --git a/kz_cafe_core/bin/kz/cafe/exceptions/MaulformedLoginException.class b/kz_cafe_core/bin/kz/cafe/exceptions/MaulformedLoginException.class new file mode 100644 index 0000000..2f28f24 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/exceptions/MaulformedLoginException.class differ diff --git a/kz_cafe_core/bin/kz/cafe/exceptions/ObjectNotFoundException.class b/kz_cafe_core/bin/kz/cafe/exceptions/ObjectNotFoundException.class new file mode 100644 index 0000000..741f112 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/exceptions/ObjectNotFoundException.class differ diff --git a/kz_cafe_core/bin/kz/cafe/exceptions/ServiceConfigurationException.class b/kz_cafe_core/bin/kz/cafe/exceptions/ServiceConfigurationException.class new file mode 100644 index 0000000..e2bcfcf Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/exceptions/ServiceConfigurationException.class differ diff --git a/kz_cafe_core/bin/kz/cafe/exceptions/SessionNotFoundException.class b/kz_cafe_core/bin/kz/cafe/exceptions/SessionNotFoundException.class new file mode 100644 index 0000000..4cc8b29 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/exceptions/SessionNotFoundException.class differ diff --git a/kz_cafe_core/bin/kz/cafe/exceptions/UserNotFoundException.class b/kz_cafe_core/bin/kz/cafe/exceptions/UserNotFoundException.class new file mode 100644 index 0000000..b7d5276 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/exceptions/UserNotFoundException.class differ diff --git a/kz_cafe_core/bin/kz/cafe/logs/LogTableFormatter$RowData.class b/kz_cafe_core/bin/kz/cafe/logs/LogTableFormatter$RowData.class new file mode 100644 index 0000000..20e92d4 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/logs/LogTableFormatter$RowData.class differ diff --git a/kz_cafe_core/bin/kz/cafe/logs/LogTableFormatter$RowEnd.class b/kz_cafe_core/bin/kz/cafe/logs/LogTableFormatter$RowEnd.class new file mode 100644 index 0000000..4635114 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/logs/LogTableFormatter$RowEnd.class differ diff --git a/kz_cafe_core/bin/kz/cafe/logs/LogTableFormatter$RowSeparator.class b/kz_cafe_core/bin/kz/cafe/logs/LogTableFormatter$RowSeparator.class new file mode 100644 index 0000000..709db2a Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/logs/LogTableFormatter$RowSeparator.class differ diff --git a/kz_cafe_core/bin/kz/cafe/logs/LogTableFormatter$TableRow.class b/kz_cafe_core/bin/kz/cafe/logs/LogTableFormatter$TableRow.class new file mode 100644 index 0000000..8a9b34e Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/logs/LogTableFormatter$TableRow.class differ diff --git a/kz_cafe_core/bin/kz/cafe/logs/LogTableFormatter.class b/kz_cafe_core/bin/kz/cafe/logs/LogTableFormatter.class new file mode 100644 index 0000000..3b50c9e Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/logs/LogTableFormatter.class differ diff --git a/kz_cafe_core/bin/kz/cafe/logs/LogTreeFormatter$Node.class b/kz_cafe_core/bin/kz/cafe/logs/LogTreeFormatter$Node.class new file mode 100644 index 0000000..47684df Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/logs/LogTreeFormatter$Node.class differ diff --git a/kz_cafe_core/bin/kz/cafe/logs/LogTreeFormatter.class b/kz_cafe_core/bin/kz/cafe/logs/LogTreeFormatter.class new file mode 100644 index 0000000..8cfc258 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/logs/LogTreeFormatter.class differ diff --git a/kz_cafe_core/bin/kz/cafe/misc/RubCafeConverter.class b/kz_cafe_core/bin/kz/cafe/misc/RubCafeConverter.class new file mode 100644 index 0000000..6cb04c4 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/misc/RubCafeConverter.class differ diff --git a/kz_cafe_core/bin/kz/cafe/utils/Mailer$1.class b/kz_cafe_core/bin/kz/cafe/utils/Mailer$1.class new file mode 100644 index 0000000..6ca9170 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/utils/Mailer$1.class differ diff --git a/kz_cafe_core/bin/kz/cafe/utils/Mailer$SMTPAuthenticator.class b/kz_cafe_core/bin/kz/cafe/utils/Mailer$SMTPAuthenticator.class new file mode 100644 index 0000000..86060a4 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/utils/Mailer$SMTPAuthenticator.class differ diff --git a/kz_cafe_core/bin/kz/cafe/utils/Mailer.class b/kz_cafe_core/bin/kz/cafe/utils/Mailer.class new file mode 100644 index 0000000..54c8036 Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/utils/Mailer.class differ diff --git a/kz_cafe_core/bin/kz/cafe/utils/VelocityProc.class b/kz_cafe_core/bin/kz/cafe/utils/VelocityProc.class new file mode 100644 index 0000000..efb2c8a Binary files /dev/null and b/kz_cafe_core/bin/kz/cafe/utils/VelocityProc.class differ diff --git a/kz_cafe_core/bin/log4j.dtd b/kz_cafe_core/bin/log4j.dtd new file mode 100644 index 0000000..1aabd96 --- /dev/null +++ b/kz_cafe_core/bin/log4j.dtd @@ -0,0 +1,227 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kz_cafe_core/bin/log4j.xml b/kz_cafe_core/bin/log4j.xml new file mode 100644 index 0000000..c596888 --- /dev/null +++ b/kz_cafe_core/bin/log4j.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kz_cafe_core/bin/new_feedback.vm b/kz_cafe_core/bin/new_feedback.vm new file mode 100644 index 0000000..bc95d25 --- /dev/null +++ b/kz_cafe_core/bin/new_feedback.vm @@ -0,0 +1,9 @@ +Новый отзыв для: $cafe_name + +От: $user_name $user_login $user_phone + +Заголовок: $title + +Рейт: $rate + +Текст: $text diff --git a/kz_cafe_core/bin/new_order.vm b/kz_cafe_core/bin/new_order.vm new file mode 100644 index 0000000..0e85dea --- /dev/null +++ b/kz_cafe_core/bin/new_order.vm @@ -0,0 +1,20 @@ +Новый Заказ в: $cafe_name + +От: $user_name $user_login $user_phone + +Состав: #set($number = 0) +#foreach($item in $items) + #set($number = $number + 1) + + $number. $item.getName() + Кол-во: $item.getQuantity() + Цена за 1 шт: $item.getPrice() +#end + + +Комментарий: $comment + + +------------------------ +Предв. цена: $price + diff --git a/kz_cafe_core/bin/new_reserve.vm b/kz_cafe_core/bin/new_reserve.vm new file mode 100644 index 0000000..0144dcc --- /dev/null +++ b/kz_cafe_core/bin/new_reserve.vm @@ -0,0 +1,9 @@ +Новая Бронь в: $cafe_name + +От: $user_name $user_login $user_phone + +Мест: $sits + +Дата: $date + +Комментарий: $comment diff --git a/kz_cafe_core/bin/server.properties b/kz_cafe_core/bin/server.properties new file mode 100644 index 0000000..1afa5e2 --- /dev/null +++ b/kz_cafe_core/bin/server.properties @@ -0,0 +1,30 @@ +internal_logger_format=%d [%t] [%c] %m%n[%-5p %C %M.%L %x]%n%n + +log_paths=Z:/ + +image_directory=C:/Tomcat/6_0_37/webapps/1 +#image_url=http://localhost:8180/1 +image_url=http://bonmenu.kz:6007/images + +audio_url=http://bonmenu.kz:6007/audio + + +#email_support=true +#email_service=http://moscow.silyus.com:8080/mail/ + +email_smtp_host=localhost +email_smtp_port=25 +email_smtp_user=robot@bonmenu.kz +email_smtp_password=hruk +email_robot=robot@bonmenu.kz +email_address_feedback=a.zemskov@gmail.com + + +debug=true + +database_name=kz_cafe +#database_ip=localhost +database_ip=servers4.me +#database_ip=bonmenu.kz + + diff --git a/kz_cafe_core/bin/template_email_confirmation_en.txt b/kz_cafe_core/bin/template_email_confirmation_en.txt new file mode 100644 index 0000000..b11359d --- /dev/null +++ b/kz_cafe_core/bin/template_email_confirmation_en.txt @@ -0,0 +1,8 @@ +Здравствуйте, + +Ваш адрес %email% в проекте BonMenu.kz требует подтверждения. + +Перейдите, пожалуйста, по этой ссылке: +%confirmation_link% + +Команда BonMenu.kz \ No newline at end of file diff --git a/kz_cafe_core/bin/template_email_confirmation_kz.txt b/kz_cafe_core/bin/template_email_confirmation_kz.txt new file mode 100644 index 0000000..b11359d --- /dev/null +++ b/kz_cafe_core/bin/template_email_confirmation_kz.txt @@ -0,0 +1,8 @@ +Здравствуйте, + +Ваш адрес %email% в проекте BonMenu.kz требует подтверждения. + +Перейдите, пожалуйста, по этой ссылке: +%confirmation_link% + +Команда BonMenu.kz \ No newline at end of file diff --git a/kz_cafe_core/bin/template_email_confirmation_ru.txt b/kz_cafe_core/bin/template_email_confirmation_ru.txt new file mode 100644 index 0000000..b11359d --- /dev/null +++ b/kz_cafe_core/bin/template_email_confirmation_ru.txt @@ -0,0 +1,8 @@ +Здравствуйте, + +Ваш адрес %email% в проекте BonMenu.kz требует подтверждения. + +Перейдите, пожалуйста, по этой ссылке: +%confirmation_link% + +Команда BonMenu.kz \ No newline at end of file diff --git a/kz_cafe_core/bin/template_email_confirmation_ua.txt b/kz_cafe_core/bin/template_email_confirmation_ua.txt new file mode 100644 index 0000000..b11359d --- /dev/null +++ b/kz_cafe_core/bin/template_email_confirmation_ua.txt @@ -0,0 +1,8 @@ +Здравствуйте, + +Ваш адрес %email% в проекте BonMenu.kz требует подтверждения. + +Перейдите, пожалуйста, по этой ссылке: +%confirmation_link% + +Команда BonMenu.kz \ No newline at end of file diff --git a/kz_cafe_core/bin/template_password_recovery_en.txt b/kz_cafe_core/bin/template_password_recovery_en.txt new file mode 100644 index 0000000..6e2d400 --- /dev/null +++ b/kz_cafe_core/bin/template_password_recovery_en.txt @@ -0,0 +1,7 @@ +Hello, + +Here is your BonMenu.kz account info: +login=%login% +password=%password% + +/Support \ No newline at end of file diff --git a/kz_cafe_core/bin/template_password_recovery_kz.txt b/kz_cafe_core/bin/template_password_recovery_kz.txt new file mode 100644 index 0000000..03a2833 --- /dev/null +++ b/kz_cafe_core/bin/template_password_recovery_kz.txt @@ -0,0 +1,7 @@ +Здравствуйте, + +Ваш пароль для приложения BonMenu.kz +login=%login% +password=%password% + +Команда BonMenu.kz \ No newline at end of file diff --git a/kz_cafe_core/bin/template_password_recovery_ru.txt b/kz_cafe_core/bin/template_password_recovery_ru.txt new file mode 100644 index 0000000..03a2833 --- /dev/null +++ b/kz_cafe_core/bin/template_password_recovery_ru.txt @@ -0,0 +1,7 @@ +Здравствуйте, + +Ваш пароль для приложения BonMenu.kz +login=%login% +password=%password% + +Команда BonMenu.kz \ No newline at end of file diff --git a/kz_cafe_core/bin/template_password_recovery_ua.txt b/kz_cafe_core/bin/template_password_recovery_ua.txt new file mode 100644 index 0000000..03a2833 --- /dev/null +++ b/kz_cafe_core/bin/template_password_recovery_ua.txt @@ -0,0 +1,7 @@ +Здравствуйте, + +Ваш пароль для приложения BonMenu.kz +login=%login% +password=%password% + +Команда BonMenu.kz \ No newline at end of file diff --git a/kz_cafe_core/lib/asm-3.1.jar b/kz_cafe_core/lib/asm-3.1.jar new file mode 100644 index 0000000..8217cae Binary files /dev/null and b/kz_cafe_core/lib/asm-3.1.jar differ diff --git a/kz_cafe_core/lib/commons-collections-3.1.jar b/kz_cafe_core/lib/commons-collections-3.1.jar new file mode 100644 index 0000000..41e230f Binary files /dev/null and b/kz_cafe_core/lib/commons-collections-3.1.jar differ diff --git a/kz_cafe_core/lib/commons-logging.jar b/kz_cafe_core/lib/commons-logging.jar new file mode 100644 index 0000000..8758a96 Binary files /dev/null and b/kz_cafe_core/lib/commons-logging.jar differ diff --git a/kz_cafe_core/lib/imap.jar b/kz_cafe_core/lib/imap.jar new file mode 100644 index 0000000..158fe2a Binary files /dev/null and b/kz_cafe_core/lib/imap.jar differ diff --git a/kz_cafe_core/lib/jersey-client-1.5.jar b/kz_cafe_core/lib/jersey-client-1.5.jar new file mode 100644 index 0000000..62f790f Binary files /dev/null and b/kz_cafe_core/lib/jersey-client-1.5.jar differ diff --git a/kz_cafe_core/lib/jersey-core-1.5.jar b/kz_cafe_core/lib/jersey-core-1.5.jar new file mode 100644 index 0000000..92b3846 Binary files /dev/null and b/kz_cafe_core/lib/jersey-core-1.5.jar differ diff --git a/kz_cafe_core/lib/jersey-json-1.5.jar b/kz_cafe_core/lib/jersey-json-1.5.jar new file mode 100644 index 0000000..01d8c83 Binary files /dev/null and b/kz_cafe_core/lib/jersey-json-1.5.jar differ diff --git a/kz_cafe_core/lib/jersey-server-1.5.jar b/kz_cafe_core/lib/jersey-server-1.5.jar new file mode 100644 index 0000000..a29d740 Binary files /dev/null and b/kz_cafe_core/lib/jersey-server-1.5.jar differ diff --git a/kz_cafe_core/lib/jsr311-api-1.1.1.jar b/kz_cafe_core/lib/jsr311-api-1.1.1.jar new file mode 100644 index 0000000..ec8bc81 Binary files /dev/null and b/kz_cafe_core/lib/jsr311-api-1.1.1.jar differ diff --git a/kz_cafe_core/lib/log4j.jar b/kz_cafe_core/lib/log4j.jar new file mode 100644 index 0000000..c930a6a Binary files /dev/null and b/kz_cafe_core/lib/log4j.jar differ diff --git a/kz_cafe_core/lib/mailapi.jar b/kz_cafe_core/lib/mailapi.jar new file mode 100644 index 0000000..fc37e89 Binary files /dev/null and b/kz_cafe_core/lib/mailapi.jar differ diff --git a/kz_cafe_core/lib/mongo-2.6.3.jar b/kz_cafe_core/lib/mongo-2.6.3.jar new file mode 100644 index 0000000..9d54d54 Binary files /dev/null and b/kz_cafe_core/lib/mongo-2.6.3.jar differ diff --git a/kz_cafe_core/lib/morphia-1.00-SNAPSHOT.jar b/kz_cafe_core/lib/morphia-1.00-SNAPSHOT.jar new file mode 100644 index 0000000..e55b615 Binary files /dev/null and b/kz_cafe_core/lib/morphia-1.00-SNAPSHOT.jar differ diff --git a/kz_cafe_core/lib/pop3.jar b/kz_cafe_core/lib/pop3.jar new file mode 100644 index 0000000..4c0fa6a Binary files /dev/null and b/kz_cafe_core/lib/pop3.jar differ diff --git a/kz_cafe_core/lib/smtp.jar b/kz_cafe_core/lib/smtp.jar new file mode 100644 index 0000000..90d4794 Binary files /dev/null and b/kz_cafe_core/lib/smtp.jar differ diff --git a/kz_cafe_core/lib/sqlitejdbc-v056.jar b/kz_cafe_core/lib/sqlitejdbc-v056.jar new file mode 100644 index 0000000..f95d90e Binary files /dev/null and b/kz_cafe_core/lib/sqlitejdbc-v056.jar differ diff --git a/kz_cafe_core/lib/velocity-dep-1.5.jar b/kz_cafe_core/lib/velocity-dep-1.5.jar new file mode 100644 index 0000000..be52b9a Binary files /dev/null and b/kz_cafe_core/lib/velocity-dep-1.5.jar differ diff --git a/kz_cafe_core/log.txt b/kz_cafe_core/log.txt new file mode 100644 index 0000000..90ae376 --- /dev/null +++ b/kz_cafe_core/log.txt @@ -0,0 +1,2265 @@ +2015-05-05 01:37:01,143 [main] [MONGO] Connecting to DB... +[INFO kz.cafe.db.MongoService .26 ] + +2015-05-05 01:37:30,081 [main] [MONGO] ok. +[INFO kz.cafe.db.MongoService .56 ] + +2015-05-05 01:37:30,546 [main] [MONGO] MCafe [CID=1, mapName={KZ=Нұршаш, RU=Нуршаш, EN=Nurshash}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:30,546 [main] [MONGO] save() MCafe [CID=1, mapName={KZ=Нұршаш, RU=Нуршаш, EN=Nurshash}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:30,671 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:30,671 [main] [MONGO] MCafe [CID=2, mapName={KZ=Рауан, RU=Рауан, EN=Rauan}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:30,671 [main] [MONGO] save() MCafe [CID=2, mapName={KZ=Рауан, RU=Рауан, EN=Rauan}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:30,829 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:30,829 [main] [MONGO] MCafe [CID=188, mapName={KZ=Сара, RU=Сара, EN=Sara}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:30,829 [main] [MONGO] save() MCafe [CID=188, mapName={KZ=Сара, RU=Сара, EN=Sara}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:30,999 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:30,999 [main] [MONGO] MCafe [CID=4, mapName={KZ=Bar...O'Da, RU=Bar...O'Da, EN=Bar...O'Da}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:30,999 [main] [MONGO] save() MCafe [CID=4, mapName={KZ=Bar...O'Da, RU=Bar...O'Da, EN=Bar...O'Da}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:31,158 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:31,158 [main] [MONGO] MCafe [CID=5, mapName={KZ=Магнит, RU=Магнит, EN=Magnit}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:31,158 [main] [MONGO] save() MCafe [CID=5, mapName={KZ=Магнит, RU=Магнит, EN=Magnit}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:31,317 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:31,317 [main] [MONGO] MCafe [CID=6, mapName={KZ=Pablo, RU=Pablo, EN=Pablo}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:31,317 [main] [MONGO] save() MCafe [CID=6, mapName={KZ=Pablo, RU=Pablo, EN=Pablo}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:31,487 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:31,487 [main] [MONGO] MCafe [CID=7, mapName={KZ=Гүлдер, RU=Гулдер, EN=Gulder}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:31,487 [main] [MONGO] save() MCafe [CID=7, mapName={KZ=Гүлдер, RU=Гулдер, EN=Gulder}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:31,646 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:31,646 [main] [MONGO] MCafe [CID=8, mapName={KZ=Taksim, RU=Taksim, EN=Taksim}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:31,646 [main] [MONGO] save() MCafe [CID=8, mapName={KZ=Taksim, RU=Taksim, EN=Taksim}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:31,805 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:31,805 [main] [MONGO] MCafe [CID=9, mapName={KZ=Barbaris, RU=Barbaris, EN=Barbaris}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:31,805 [main] [MONGO] save() MCafe [CID=9, mapName={KZ=Barbaris, RU=Barbaris, EN=Barbaris}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:31,963 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:31,963 [main] [MONGO] MCafe [CID=10, mapName={KZ=Нұр Дана, RU=Нур Дана, EN=Nur Dana}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:31,963 [main] [MONGO] save() MCafe [CID=10, mapName={KZ=Нұр Дана, RU=Нур Дана, EN=Nur Dana}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:32,122 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:32,122 [main] [MONGO] MCafe [CID=11, mapName={KZ=Alefun Pub, RU=Alefun Pub, EN=Alefun Pub}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:32,134 [main] [MONGO] save() MCafe [CID=11, mapName={KZ=Alefun Pub, RU=Alefun Pub, EN=Alefun Pub}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:32,247 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:32,247 [main] [MONGO] MCafe [CID=12, mapName={KZ=Охотничий привал, RU=Охотничий привал, EN=Hunting camp}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:32,247 [main] [MONGO] save() MCafe [CID=12, mapName={KZ=Охотничий привал, RU=Охотничий привал, EN=Hunting camp}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:32,406 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:32,406 [main] [MONGO] MCafe [CID=13, mapName={KZ=Рауан, RU=Рауан Ресторан, EN=Rauan Restaurant}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:32,406 [main] [MONGO] save() MCafe [CID=13, mapName={KZ=Рауан, RU=Рауан Ресторан, EN=Rauan Restaurant}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:32,565 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:32,576 [main] [MONGO] MCafe [CID=14, mapName={KZ=Prime Sport Бар, RU=Спорт Бар Prime, EN=Prime Sport Bar}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:32,576 [main] [MONGO] save() MCafe [CID=14, mapName={KZ=Prime Sport Бар, RU=Спорт Бар Prime, EN=Prime Sport Bar}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:32,735 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:32,735 [main] [MONGO] MCafe [CID=15, mapName={KZ=Хуторок, RU=Хуторок, EN=Hutorok}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:32,735 [main] [MONGO] save() MCafe [CID=15, mapName={KZ=Хуторок, RU=Хуторок, EN=Hutorok}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:32,893 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:32,893 [main] [MONGO] MCafe [CID=16, mapName={KZ=Старое кафесі, RU=Старое Кафе, EN=Old Cafe}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:32,893 [main] [MONGO] save() MCafe [CID=16, mapName={KZ=Старое кафесі, RU=Старое Кафе, EN=Old Cafe}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:33,052 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:33,052 [main] [MONGO] MCafe [CID=17, mapName={KZ=Желкен, RU=Calypco, EN=Zhelken}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:33,052 [main] [MONGO] save() MCafe [CID=17, mapName={KZ=Желкен, RU=Calypco, EN=Zhelken}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:33,222 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:33,222 [main] [MONGO] MCafe [CID=18, mapName={KZ=Атамекен, RU=Атамекен, EN=Atameken}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:33,222 [main] [MONGO] save() MCafe [CID=18, mapName={KZ=Атамекен, RU=Атамекен, EN=Atameken}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:33,381 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:33,381 [main] [MONGO] MCafe [CID=19, mapName={KZ=Porta, RU=Porta, EN=Porta}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:33,381 [main] [MONGO] save() MCafe [CID=19, mapName={KZ=Porta, RU=Porta, EN=Porta}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:33,540 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:33,540 [main] [MONGO] MCafe [CID=20, mapName={KZ=Kemer, RU=Kemer, EN=Kemer}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:33,540 [main] [MONGO] save() MCafe [CID=20, mapName={KZ=Kemer, RU=Kemer, EN=Kemer}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:33,699 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:33,699 [main] [MONGO] MCafe [CID=21, mapName={KZ=Тайқазан, RU=Тайказан, EN=Taikazan}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:33,699 [main] [MONGO] save() MCafe [CID=21, mapName={KZ=Тайқазан, RU=Тайказан, EN=Taikazan}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:33,857 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:33,857 [main] [MONGO] MCafe [CID=22, mapName={KZ=Green Line, RU=Green Line, EN=Green Line}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:33,857 [main] [MONGO] save() MCafe [CID=22, mapName={KZ=Green Line, RU=Green Line, EN=Green Line}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:34,028 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:34,028 [main] [MONGO] MCafe [CID=23, mapName={KZ=Спорт Бар 713, RU=Спорт Бар 713, EN=Sport Bar 713}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:34,028 [main] [MONGO] save() MCafe [CID=23, mapName={KZ=Спорт Бар 713, RU=Спорт Бар 713, EN=Sport Bar 713}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:34,186 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:34,186 [main] [MONGO] MCafe [CID=24, mapName={KZ=Алтын таға, RU=Алтын тага, EN=Golden horseshoe}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:34,186 [main] [MONGO] save() MCafe [CID=24, mapName={KZ=Алтын таға, RU=Алтын тага, EN=Golden horseshoe}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:34,345 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:34,345 [main] [MONGO] MCafe [CID=25, mapName={KZ=Пивоварофф, RU=Пивоварофф, EN=Pivovaroff}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:34,345 [main] [MONGO] save() MCafe [CID=25, mapName={KZ=Пивоварофф, RU=Пивоварофф, EN=Pivovaroff}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:34,402 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:34,402 [main] [MONGO] MCafe [CID=26, mapName={KZ=Зере, RU=Зере, EN=Zere}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:34,402 [main] [MONGO] save() MCafe [CID=26, mapName={KZ=Зере, RU=Зере, EN=Zere}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:34,572 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:34,572 [main] [MONGO] MCafe [CID=27, mapName={KZ=Урарту, RU=Урарту, EN=Urartu}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:34,572 [main] [MONGO] save() MCafe [CID=27, mapName={KZ=Урарту, RU=Урарту, EN=Urartu}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:34,742 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:34,742 [main] [MONGO] MCafe [CID=28, mapName={KZ=Замок, RU=Замок, EN=Castle}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:34,742 [main] [MONGO] save() MCafe [CID=28, mapName={KZ=Замок, RU=Замок, EN=Castle}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:34,901 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:34,901 [main] [MONGO] MCafe [CID=200, mapName={KZ=Таверна, RU=Таверна, EN=Tavern}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:34,901 [main] [MONGO] save() MCafe [CID=200, mapName={KZ=Таверна, RU=Таверна, EN=Tavern}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:35,060 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:35,060 [main] [MONGO] MCafe [CID=30, mapName={KZ=Glamour, RU=Glamour, EN=Glamour}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:35,060 [main] [MONGO] save() MCafe [CID=30, mapName={KZ=Glamour, RU=Glamour, EN=Glamour}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:35,230 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:35,230 [main] [MONGO] MCafe [CID=31, mapName={KZ=Аққу, RU=Акку, EN=Akku}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:35,230 [main] [MONGO] save() MCafe [CID=31, mapName={KZ=Аққу, RU=Акку, EN=Akku}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:35,389 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:35,389 [main] [MONGO] MCafe [CID=32, mapName={KZ=Чито-Гврито, RU=Чито-Гврито, EN=Chito-Gvrito}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:35,389 [main] [MONGO] save() MCafe [CID=32, mapName={KZ=Чито-Гврито, RU=Чито-Гврито, EN=Chito-Gvrito}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:35,547 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:35,547 [main] [MONGO] MCafe [CID=33, mapName={KZ=Халва, RU=Халва, EN=Halva}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:35,547 [main] [MONGO] save() MCafe [CID=33, mapName={KZ=Халва, RU=Халва, EN=Halva}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:35,717 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:35,717 [main] [MONGO] MCafe [CID=34, mapName={KZ=Свежак, RU=Свежак, EN=Svezhak}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:35,717 [main] [MONGO] save() MCafe [CID=34, mapName={KZ=Свежак, RU=Свежак, EN=Svezhak}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:35,876 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:35,876 [main] [MONGO] MCafe [CID=35, mapName={KZ=Ұлытау, RU=Улытау, EN=Ulytau}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:35,876 [main] [MONGO] save() MCafe [CID=35, mapName={KZ=Ұлытау, RU=Улытау, EN=Ulytau}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:36,035 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:36,035 [main] [MONGO] MCafe [CID=36, mapName={KZ=Амирани, RU=Амирани, EN=Amirani}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:36,035 [main] [MONGO] save() MCafe [CID=36, mapName={KZ=Амирани, RU=Амирани, EN=Amirani}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:36,194 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:36,194 [main] [MONGO] MCafe [CID=37, mapName={KZ=Думан, RU=Думан, EN=Duman}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:36,194 [main] [MONGO] save() MCafe [CID=37, mapName={KZ=Думан, RU=Думан, EN=Duman}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:36,353 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:36,353 [main] [MONGO] MCafe [CID=38, mapName={KZ=ШашлыкоFF, RU=ШашлыкоFF, EN=ShashlikoFF}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:36,353 [main] [MONGO] save() MCafe [CID=38, mapName={KZ=ШашлыкоFF, RU=ШашлыкоFF, EN=ShashlikoFF}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:36,523 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:36,523 [main] [MONGO] MCafe [CID=39, mapName={KZ=Барс, RU=Барс, EN=Bars}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:36,523 [main] [MONGO] save() MCafe [CID=39, mapName={KZ=Барс, RU=Барс, EN=Bars}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:36,681 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:36,681 [main] [MONGO] MCafe [CID=40, mapName={KZ=Астория, RU=Астория, EN=Astoria}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:36,681 [main] [MONGO] save() MCafe [CID=40, mapName={KZ=Астория, RU=Астория, EN=Astoria}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:36,840 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:36,840 [main] [MONGO] MCafe [CID=41, mapName={KZ=Арарат, RU=Арарат, EN=Ararat}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:36,840 [main] [MONGO] save() MCafe [CID=41, mapName={KZ=Арарат, RU=Арарат, EN=Ararat}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:36,999 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:36,999 [main] [MONGO] MCafe [CID=42, mapName={KZ=Антарес, RU=Антарес, EN=Antares}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:36,999 [main] [MONGO] save() MCafe [CID=42, mapName={KZ=Антарес, RU=Антарес, EN=Antares}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:37,158 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:37,158 [main] [MONGO] MCafe [CID=43, mapName={KZ=Асыл Тас, RU=Асыл Тас, EN=Asyl Tas}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:37,158 [main] [MONGO] save() MCafe [CID=43, mapName={KZ=Асыл Тас, RU=Асыл Тас, EN=Asyl Tas}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:37,328 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:37,328 [main] [MONGO] MCafe [CID=44, mapName={KZ=Асату, RU=Асату, EN=Asatu}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:37,328 [main] [MONGO] save() MCafe [CID=44, mapName={KZ=Асату, RU=Асату, EN=Asatu}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:37,487 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:37,487 [main] [MONGO] MCafe [CID=45, mapName={KZ=Достық, RU=Достык, EN=Dostyk}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:37,487 [main] [MONGO] save() MCafe [CID=45, mapName={KZ=Достық, RU=Достык, EN=Dostyk}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:37,645 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:37,645 [main] [MONGO] MCafe [CID=46, mapName={KZ=Blackk, RU=Blackk, EN=Blackk}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:37,645 [main] [MONGO] save() MCafe [CID=46, mapName={KZ=Blackk, RU=Blackk, EN=Blackk}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:37,804 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:37,804 [main] [MONGO] MCafe [CID=47, mapName={KZ=Ударник, RU=Ударник, EN=Udarnik}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:37,804 [main] [MONGO] save() MCafe [CID=47, mapName={KZ=Ударник, RU=Ударник, EN=Udarnik}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:37,963 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:37,963 [main] [MONGO] MCafe [CID=48, mapName={KZ=У Аркаши, RU=У Аркаши, EN=Arkasha}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:37,963 [main] [MONGO] save() MCafe [CID=48, mapName={KZ=У Аркаши, RU=У Аркаши, EN=Arkasha}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:38,133 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:38,133 [main] [MONGO] MCafe [CID=235, mapName={KZ=Panda Wok Box, RU=Panda Wok Box, EN=Panda Wok Box}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:38,133 [main] [MONGO] save() MCafe [CID=235, mapName={KZ=Panda Wok Box, RU=Panda Wok Box, EN=Panda Wok Box}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:38,292 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:38,292 [main] [MONGO] MCafe [CID=201, mapName={KZ=Сарыарка, RU=Сарыарка, EN=Saryarka}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:38,292 [main] [MONGO] save() MCafe [CID=201, mapName={KZ=Сарыарка, RU=Сарыарка, EN=Saryarka}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:38,451 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:38,451 [main] [MONGO] MCafe [CID=202, mapName={KZ=Би-Әлім, RU=Би-Әлім, EN=Bi-Alim}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:38,451 [main] [MONGO] save() MCafe [CID=202, mapName={KZ=Би-Әлім, RU=Би-Әлім, EN=Bi-Alim}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:38,609 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:38,609 [main] [MONGO] MCafe [CID=203, mapName={KZ=Nirvana, RU=Nirvana, EN=Nirvana}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:38,609 [main] [MONGO] save() MCafe [CID=203, mapName={KZ=Nirvana, RU=Nirvana, EN=Nirvana}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:38,780 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:38,780 [main] [MONGO] MCafe [CID=205, mapName={KZ=Garage Grill&Bar, RU=Garage Grill&Bar, EN=Garage Grill&Bar}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:38,780 [main] [MONGO] save() MCafe [CID=205, mapName={KZ=Garage Grill&Bar, RU=Garage Grill&Bar, EN=Garage Grill&Bar}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:38,938 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:38,938 [main] [MONGO] MCafe [CID=51, mapName={KZ=Twist, RU=Twist, EN=Twist}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:38,938 [main] [MONGO] save() MCafe [CID=51, mapName={KZ=Twist, RU=Twist, EN=Twist}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:39,097 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:39,097 [main] [MONGO] MCafe [CID=52, mapName={KZ=Пивоварофф бильярд, RU=Пивоварофф бильярдная, EN=Pivovaroff billiards}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:39,097 [main] [MONGO] save() MCafe [CID=52, mapName={KZ=Пивоварофф бильярд, RU=Пивоварофф бильярдная, EN=Pivovaroff billiards}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:39,256 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:39,256 [main] [MONGO] MCafe [CID=53, mapName={KZ=Carlsberg, RU=Carlsberg, EN=Carlsberg}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:39,256 [main] [MONGO] save() MCafe [CID=53, mapName={KZ=Carlsberg, RU=Carlsberg, EN=Carlsberg}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:39,415 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:39,415 [main] [MONGO] MCafe [CID=54, mapName={KZ=Бочонок, RU=Бочонок, EN=Bochonok}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:39,415 [main] [MONGO] save() MCafe [CID=54, mapName={KZ=Бочонок, RU=Бочонок, EN=Bochonok}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:39,539 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:39,539 [main] [MONGO] MCafe [CID=55, mapName={KZ=Шахерезада, RU=Шахрезада, EN=Shahrezada}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:39,539 [main] [MONGO] save() MCafe [CID=55, mapName={KZ=Шахерезада, RU=Шахрезада, EN=Shahrezada}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:39,698 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:39,698 [main] [MONGO] MCafe [CID=56, mapName={KZ=Aura, RU=Aura, EN=Aura}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:39,698 [main] [MONGO] save() MCafe [CID=56, mapName={KZ=Aura, RU=Aura, EN=Aura}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:39,857 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:39,857 [main] [MONGO] MCafe [CID=57, mapName={KZ=Аппетит Food, RU=Аппетит Food, EN=Appetite Food}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:39,857 [main] [MONGO] save() MCafe [CID=57, mapName={KZ=Аппетит Food, RU=Аппетит Food, EN=Appetite Food}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:40,027 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:40,027 [main] [MONGO] MCafe [CID=58, mapName={KZ=Бухара, RU=Бухара, EN=Buhara}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:40,027 [main] [MONGO] save() MCafe [CID=58, mapName={KZ=Бухара, RU=Бухара, EN=Buhara}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:40,186 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:40,186 [main] [MONGO] MCafe [CID=59, mapName={KZ=Арцах, RU=Арцах, EN=Arcah}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:40,186 [main] [MONGO] save() MCafe [CID=59, mapName={KZ=Арцах, RU=Арцах, EN=Arcah}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:40,345 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:40,345 [main] [MONGO] MCafe [CID=60, mapName={KZ=Демалыс, RU=Демалыс, EN=Demalys}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:40,345 [main] [MONGO] save() MCafe [CID=60, mapName={KZ=Демалыс, RU=Демалыс, EN=Demalys}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:40,469 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:40,469 [main] [MONGO] MCafe [CID=61, mapName={KZ=Extreme, RU=Extreme, EN=Extreme}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:40,469 [main] [MONGO] save() MCafe [CID=61, mapName={KZ=Extreme, RU=Extreme, EN=Extreme}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:40,628 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:40,628 [main] [MONGO] MCafe [CID=62, mapName={KZ=Ғарыш, RU=Гарыш, EN=Space}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:40,628 [main] [MONGO] save() MCafe [CID=62, mapName={KZ=Ғарыш, RU=Гарыш, EN=Space}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:40,787 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:40,787 [main] [MONGO] MCafe [CID=63, mapName={KZ=Бакинский дворик, RU=Бакинский дворик, EN=Bakinskiy dvorik}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:40,787 [main] [MONGO] save() MCafe [CID=63, mapName={KZ=Бакинский дворик, RU=Бакинский дворик, EN=Bakinskiy dvorik}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:40,957 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:40,957 [main] [MONGO] MCafe [CID=64, mapName={KZ=Элегия, RU=Элегия, EN=Elegiya}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:40,957 [main] [MONGO] save() MCafe [CID=64, mapName={KZ=Элегия, RU=Элегия, EN=Elegiya}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:41,132 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:41,132 [main] [MONGO] MCafe [CID=65, mapName={KZ=Шаңырақ, RU=Шанырак, EN=Shanyrak}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:41,132 [main] [MONGO] save() MCafe [CID=65, mapName={KZ=Шаңырақ, RU=Шанырак, EN=Shanyrak}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:41,319 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:41,319 [main] [MONGO] MCafe [CID=66, mapName={KZ=Italiano, RU=Italiano, EN=Italiano}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:41,319 [main] [MONGO] save() MCafe [CID=66, mapName={KZ=Italiano, RU=Italiano, EN=Italiano}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:41,494 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:41,494 [main] [MONGO] MCafe [CID=189, mapName={KZ=Ансар, RU=Ансар, EN=Ansar}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:41,494 [main] [MONGO] save() MCafe [CID=189, mapName={KZ=Ансар, RU=Ансар, EN=Ansar}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:41,668 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:41,668 [main] [MONGO] MCafe [CID=68, mapName={KZ=Хазар, RU=Хазар, EN=Hazar}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:41,668 [main] [MONGO] save() MCafe [CID=68, mapName={KZ=Хазар, RU=Хазар, EN=Hazar}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:41,843 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:41,843 [main] [MONGO] MCafe [CID=69, mapName={KZ=Натали, RU=Натали, EN=Natali}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:41,843 [main] [MONGO] save() MCafe [CID=69, mapName={KZ=Натали, RU=Натали, EN=Natali}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:42,018 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:42,018 [main] [MONGO] MCafe [CID=70, mapName={KZ=Жемчужина, RU=Merci Баку, EN=Pearl}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:42,018 [main] [MONGO] save() MCafe [CID=70, mapName={KZ=Жемчужина, RU=Merci Баку, EN=Pearl}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:42,205 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:42,205 [main] [MONGO] MCafe [CID=71, mapName={KZ=Celebrity, RU=Celebrity, EN=Celebrity}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:42,205 [main] [MONGO] save() MCafe [CID=71, mapName={KZ=Celebrity, RU=Celebrity, EN=Celebrity}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:42,379 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:42,379 [main] [MONGO] MCafe [CID=72, mapName={KZ=Серпантин, RU=Серпантин, EN=Serpantin}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:42,379 [main] [MONGO] save() MCafe [CID=72, mapName={KZ=Серпантин, RU=Серпантин, EN=Serpantin}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:42,554 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:42,554 [main] [MONGO] MCafe [CID=73, mapName={KZ=Рахат, RU=Рахат, EN=Rakhat}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:42,554 [main] [MONGO] save() MCafe [CID=73, mapName={KZ=Рахат, RU=Рахат, EN=Rakhat}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:42,729 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:42,729 [main] [MONGO] MCafe [CID=74, mapName={KZ=Рахат ресторан, RU=Рахат ресторан, EN=Rakhat restaurant}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:42,729 [main] [MONGO] save() MCafe [CID=74, mapName={KZ=Рахат ресторан, RU=Рахат ресторан, EN=Rakhat restaurant}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:42,916 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:42,916 [main] [MONGO] MCafe [CID=75, mapName={KZ=Барон Мюнхаузен, RU=Барон Мюнхгаузен, EN=Baron Munchausen}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:42,916 [main] [MONGO] save() MCafe [CID=75, mapName={KZ=Барон Мюнхаузен, RU=Барон Мюнхгаузен, EN=Baron Munchausen}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:43,090 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:43,090 [main] [MONGO] MCafe [CID=76, mapName={KZ=Velvet, RU=Velvet, EN=Velvet}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:43,090 [main] [MONGO] save() MCafe [CID=76, mapName={KZ=Velvet, RU=Velvet, EN=Velvet}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:43,265 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:43,265 [main] [MONGO] MCafe [CID=77, mapName={KZ=Tron, RU=Tron, EN=Tron}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:43,265 [main] [MONGO] save() MCafe [CID=77, mapName={KZ=Tron, RU=Tron, EN=Tron}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:43,427 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:43,427 [main] [MONGO] MCafe [CID=78, mapName={KZ=Думаш, RU=Думаш, EN=Dumash}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:43,427 [main] [MONGO] save() MCafe [CID=78, mapName={KZ=Думаш, RU=Думаш, EN=Dumash}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:43,602 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:43,602 [main] [MONGO] MCafe [CID=79, mapName={KZ=Тропикаль, RU=Тропикаль, EN=Tropical}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:43,602 [main] [MONGO] save() MCafe [CID=79, mapName={KZ=Тропикаль, RU=Тропикаль, EN=Tropical}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:43,789 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:43,789 [main] [MONGO] MCafe [CID=80, mapName={KZ=Жас Отау, RU=Жас Отау, EN=Zhas Otau}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:43,789 [main] [MONGO] save() MCafe [CID=80, mapName={KZ=Жас Отау, RU=Жас Отау, EN=Zhas Otau}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:43,964 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:43,964 [main] [MONGO] MCafe [CID=81, mapName={KZ=Ишхан, RU=Ишхан, EN=Ishhan}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:43,964 [main] [MONGO] save() MCafe [CID=81, mapName={KZ=Ишхан, RU=Ишхан, EN=Ishhan}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:44,138 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:44,138 [main] [MONGO] MCafe [CID=82, mapName={KZ=Восток, RU=Восток, EN=Vostok}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:44,138 [main] [MONGO] save() MCafe [CID=82, mapName={KZ=Восток, RU=Восток, EN=Vostok}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:44,313 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:44,313 [main] [MONGO] MCafe [CID=247, mapName={KZ=Salem, RU=Salem, EN=Salem}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:44,313 [main] [MONGO] save() MCafe [CID=247, mapName={KZ=Salem, RU=Salem, EN=Salem}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:44,488 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:44,488 [main] [MONGO] MCafe [CID=84, mapName={KZ=SM кафе, RU=SM кафе, EN=SM cafe}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:44,488 [main] [MONGO] save() MCafe [CID=84, mapName={KZ=SM кафе, RU=SM кафе, EN=SM cafe}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:44,662 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:44,662 [main] [MONGO] MCafe [CID=85, mapName={KZ=Алладин, RU=Алладин, EN=Alladin}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:44,662 [main] [MONGO] save() MCafe [CID=85, mapName={KZ=Алладин, RU=Алладин, EN=Alladin}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:44,837 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:44,837 [main] [MONGO] MCafe [CID=86, mapName={KZ=Балдырған, RU=Балдырган, EN=Baldirgan}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:44,837 [main] [MONGO] save() MCafe [CID=86, mapName={KZ=Балдырған, RU=Балдырган, EN=Baldirgan}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:45,012 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:45,012 [main] [MONGO] MCafe [CID=87, mapName={KZ=Золотой Колос, RU=Золотой Колос, EN=Zolotoi Kolos}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:45,012 [main] [MONGO] save() MCafe [CID=87, mapName={KZ=Золотой Колос, RU=Золотой Колос, EN=Zolotoi Kolos}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:45,199 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:45,199 [main] [MONGO] MCafe [CID=88, mapName={KZ=Candy, RU=Candy, EN=Candy}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:45,199 [main] [MONGO] save() MCafe [CID=88, mapName={KZ=Candy, RU=Candy, EN=Candy}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:45,373 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:45,373 [main] [MONGO] MCafe [CID=89, mapName={KZ=Нефть, RU=Нефть, EN=Neft}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:45,373 [main] [MONGO] save() MCafe [CID=89, mapName={KZ=Нефть, RU=Нефть, EN=Neft}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:45,561 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:45,561 [main] [MONGO] MCafe [CID=90, mapName={KZ=Гаухар, RU=Гаухар, EN=Gauhar}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:45,561 [main] [MONGO] save() MCafe [CID=90, mapName={KZ=Гаухар, RU=Гаухар, EN=Gauhar}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:45,735 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:45,735 [main] [MONGO] MCafe [CID=91, mapName={KZ=Ланцелот, RU=Ланцелот, EN=Lancelot}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:45,735 [main] [MONGO] save() MCafe [CID=91, mapName={KZ=Ланцелот, RU=Ланцелот, EN=Lancelot}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:45,910 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:45,910 [main] [MONGO] MCafe [CID=92, mapName={KZ=Седьмое Небо, RU=Седьмое Небо, EN=Seventh Sky}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:45,910 [main] [MONGO] save() MCafe [CID=92, mapName={KZ=Седьмое Небо, RU=Седьмое Небо, EN=Seventh Sky}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:46,085 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:46,085 [main] [MONGO] MCafe [CID=93, mapName={KZ=Ханшайым, RU=Ханшайым, EN=Hanshayim}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:46,085 [main] [MONGO] save() MCafe [CID=93, mapName={KZ=Ханшайым, RU=Ханшайым, EN=Hanshayim}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:46,259 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:46,259 [main] [MONGO] MCafe [CID=95, mapName={KZ=Мехико, RU=Мехико, EN=Mexico}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:46,259 [main] [MONGO] save() MCafe [CID=95, mapName={KZ=Мехико, RU=Мехико, EN=Mexico}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:46,434 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:46,434 [main] [MONGO] MCafe [CID=96, mapName={KZ=Сафари, RU=Сафари, EN=Safari}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:46,446 [main] [MONGO] save() MCafe [CID=96, mapName={KZ=Сафари, RU=Сафари, EN=Safari}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:46,621 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:46,621 [main] [MONGO] MCafe [CID=94, mapName={KZ=Korea House, RU=Korea House, EN=Korea House}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:46,621 [main] [MONGO] save() MCafe [CID=94, mapName={KZ=Korea House, RU=Korea House, EN=Korea House}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:46,796 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:46,796 [main] [MONGO] MCafe [CID=97, mapName={KZ=Одесса, RU=Одесса, EN=Odessa}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:46,796 [main] [MONGO] save() MCafe [CID=97, mapName={KZ=Одесса, RU=Одесса, EN=Odessa}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:46,970 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:46,970 [main] [MONGO] MCafe [CID=98, mapName={KZ=Некафе, RU=Саз Сырнай, EN=Necafe}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:46,970 [main] [MONGO] save() MCafe [CID=98, mapName={KZ=Некафе, RU=Саз Сырнай, EN=Necafe}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:47,145 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:47,145 [main] [MONGO] MCafe [CID=99, mapName={KZ=Ақ Шаңырақ, RU=Ак Шанырак, EN=Ak Shanirak}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:47,145 [main] [MONGO] save() MCafe [CID=99, mapName={KZ=Ақ Шаңырақ, RU=Ак Шанырак, EN=Ak Shanirak}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:47,320 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:47,320 [main] [MONGO] MCafe [CID=100, mapName={KZ=White Hall, RU=White Hall, EN=White Hall}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:47,320 [main] [MONGO] save() MCafe [CID=100, mapName={KZ=White Hall, RU=White Hall, EN=White Hall}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:47,507 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:47,507 [main] [MONGO] MCafe [CID=101, mapName={KZ=Jimmy Poy, RU=Jimmy Poy, EN=Jimmy Poy}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:47,507 [main] [MONGO] save() MCafe [CID=101, mapName={KZ=Jimmy Poy, RU=Jimmy Poy, EN=Jimmy Poy}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:47,681 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:47,681 [main] [MONGO] MCafe [CID=102, mapName={KZ=Хан Тенгри, RU=Хан Тенгри, EN=Khan Tengri}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:47,681 [main] [MONGO] save() MCafe [CID=102, mapName={KZ=Хан Тенгри, RU=Хан Тенгри, EN=Khan Tengri}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:47,856 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:47,856 [main] [MONGO] MCafe [CID=103, mapName={KZ=Саке, RU=Саке, EN=Sake}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:47,856 [main] [MONGO] save() MCafe [CID=103, mapName={KZ=Саке, RU=Саке, EN=Sake}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:48,031 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:48,031 [main] [MONGO] MCafe [CID=104, mapName={KZ=Гаухар, RU=Гаухар, EN=Gaukhar}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:48,031 [main] [MONGO] save() MCafe [CID=104, mapName={KZ=Гаухар, RU=Гаухар, EN=Gaukhar}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:48,205 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:48,205 [main] [MONGO] MCafe [CID=105, mapName={KZ=Көктем, RU=Көктем, EN=Koktem}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:48,205 [main] [MONGO] save() MCafe [CID=105, mapName={KZ=Көктем, RU=Көктем, EN=Koktem}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:48,393 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:48,393 [main] [MONGO] MCafe [CID=106, mapName={KZ=Чиндалле, RU=Чиндалле, EN=Chindalle}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:48,393 [main] [MONGO] save() MCafe [CID=106, mapName={KZ=Чиндалле, RU=Чиндалле, EN=Chindalle}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:48,567 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:48,567 [main] [MONGO] MCafe [CID=107, mapName={KZ=Альянс, RU=Альянс, EN=Alliance}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:48,567 [main] [MONGO] save() MCafe [CID=107, mapName={KZ=Альянс, RU=Альянс, EN=Alliance}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:48,742 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:48,742 [main] [MONGO] MCafe [CID=108, mapName={KZ=Қара Алтын, RU=Кара Алтын, EN=Kara Altyn}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:48,742 [main] [MONGO] save() MCafe [CID=108, mapName={KZ=Қара Алтын, RU=Кара Алтын, EN=Kara Altyn}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:48,917 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:48,917 [main] [MONGO] MCafe [CID=109, mapName={KZ=Тойхана, RU=Тойхана, EN=Toihana}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:48,917 [main] [MONGO] save() MCafe [CID=109, mapName={KZ=Тойхана, RU=Тойхана, EN=Toihana}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:49,091 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:49,091 [main] [MONGO] MCafe [CID=110, mapName={KZ=Ариран, RU=Ариран, EN=Ariran}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:49,104 [main] [MONGO] save() MCafe [CID=110, mapName={KZ=Ариран, RU=Ариран, EN=Ariran}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:49,278 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:49,278 [main] [MONGO] MCafe [CID=111, mapName={KZ=Нұрдаулет, RU=Нурдаулет, EN=Nurdaulet}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:49,278 [main] [MONGO] save() MCafe [CID=111, mapName={KZ=Нұрдаулет, RU=Нурдаулет, EN=Nurdaulet}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:49,453 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:49,453 [main] [MONGO] MCafe [CID=112, mapName={KZ=КӨL-Асхана, RU=КӨL-Асхана, EN=KOL Auto}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:49,453 [main] [MONGO] save() MCafe [CID=112, mapName={KZ=КӨL-Асхана, RU=КӨL-Асхана, EN=KOL Auto}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:49,628 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:49,628 [main] [MONGO] MCafe [CID=113, mapName={KZ=Стамбул, RU=Стамбул, EN=Stambul}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:49,628 [main] [MONGO] save() MCafe [CID=113, mapName={KZ=Стамбул, RU=Стамбул, EN=Stambul}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:49,802 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:49,815 [main] [MONGO] MCafe [CID=114, mapName={KZ=Пивной офис, RU=Пивной офис, EN=Beer office}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:49,815 [main] [MONGO] save() MCafe [CID=114, mapName={KZ=Пивной офис, RU=Пивной офис, EN=Beer office}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:49,989 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:49,989 [main] [MONGO] MCafe [CID=115, mapName={KZ=Екі Жүрек, RU=Еки Журек, EN=Eki Zhurek}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:49,989 [main] [MONGO] save() MCafe [CID=115, mapName={KZ=Екі Жүрек, RU=Еки Журек, EN=Eki Zhurek}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:50,164 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:50,164 [main] [MONGO] MCafe [CID=116, mapName={KZ=Фарход, RU=Фарход, EN=Farhod}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:50,164 [main] [MONGO] save() MCafe [CID=116, mapName={KZ=Фарход, RU=Фарход, EN=Farhod}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:50,339 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:50,339 [main] [MONGO] MCafe [CID=117, mapName={KZ=Жер Жаннаты, RU=Жер Жаннаты, EN=Zher Zhannati}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:50,339 [main] [MONGO] save() MCafe [CID=117, mapName={KZ=Жер Жаннаты, RU=Жер Жаннаты, EN=Zher Zhannati}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:50,513 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:50,513 [main] [MONGO] MCafe [CID=118, mapName={KZ=Тамаша, RU=Тамаша, EN=Tamasha}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:50,513 [main] [MONGO] save() MCafe [CID=118, mapName={KZ=Тамаша, RU=Тамаша, EN=Tamasha}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:50,701 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:50,701 [main] [MONGO] MCafe [CID=119, mapName={KZ=Ғалым, RU=Галым, EN=Galiym}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:50,701 [main] [MONGO] save() MCafe [CID=119, mapName={KZ=Ғалым, RU=Галым, EN=Galiym}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:50,875 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:50,875 [main] [MONGO] MCafe [CID=120, mapName={KZ=Greenwich, RU=Greenwich, EN=Greenwich}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:50,875 [main] [MONGO] save() MCafe [CID=120, mapName={KZ=Greenwich, RU=Greenwich, EN=Greenwich}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:51,050 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:51,050 [main] [MONGO] MCafe [CID=121, mapName={KZ=Амазония, RU=Амазония, EN=Amazonia}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:51,050 [main] [MONGO] save() MCafe [CID=121, mapName={KZ=Амазония, RU=Амазония, EN=Amazonia}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:51,225 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:51,225 [main] [MONGO] MCafe [CID=122, mapName={KZ=Адмирал, RU=Адмирал, EN=Admiral}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:51,225 [main] [MONGO] save() MCafe [CID=122, mapName={KZ=Адмирал, RU=Адмирал, EN=Admiral}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:51,399 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:51,399 [main] [MONGO] MCafe [CID=204, mapName={KZ=Асыл, RU=Асыл, EN=Asyl}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:51,399 [main] [MONGO] save() MCafe [CID=204, mapName={KZ=Асыл, RU=Асыл, EN=Asyl}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:51,586 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:51,586 [main] [MONGO] MCafe [CID=124, mapName={KZ=Зимний Сад, RU=Зимний Сад, EN=Winter Garden}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:51,586 [main] [MONGO] save() MCafe [CID=124, mapName={KZ=Зимний Сад, RU=Зимний Сад, EN=Winter Garden}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:51,761 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:51,761 [main] [MONGO] MCafe [CID=125, mapName={KZ=Медведь, RU=Медведь, EN=Medved}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:51,761 [main] [MONGO] save() MCafe [CID=125, mapName={KZ=Медведь, RU=Медведь, EN=Medved}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:51,936 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:51,936 [main] [MONGO] MCafe [CID=126, mapName={KZ=Анара, RU=Анара, EN=Anara}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:51,936 [main] [MONGO] save() MCafe [CID=126, mapName={KZ=Анара, RU=Анара, EN=Anara}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:52,110 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:52,110 [main] [MONGO] MCafe [CID=127, mapName={KZ=Ақниет, RU=Акниет, EN=Akniet}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:52,110 [main] [MONGO] save() MCafe [CID=127, mapName={KZ=Ақниет, RU=Акниет, EN=Akniet}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:52,285 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:52,285 [main] [MONGO] MCafe [CID=128, mapName={KZ=Минари, RU=Минари, EN=Minari}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:52,285 [main] [MONGO] save() MCafe [CID=128, mapName={KZ=Минари, RU=Минари, EN=Minari}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:52,460 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:52,460 [main] [MONGO] MCafe [CID=129, mapName={KZ=У Славика, RU=У Славика, EN=At Slavik}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:52,460 [main] [MONGO] save() MCafe [CID=129, mapName={KZ=У Славика, RU=У Славика, EN=At Slavik}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:52,647 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:52,647 [main] [MONGO] MCafe [CID=130, mapName={KZ=Сара, RU=Сара, EN=Sara}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:52,647 [main] [MONGO] save() MCafe [CID=130, mapName={KZ=Сара, RU=Сара, EN=Sara}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:52,821 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:52,821 [main] [MONGO] MCafe [CID=131, mapName={KZ=Sumatra, RU=Sumatra, EN=Sumatra}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:52,821 [main] [MONGO] save() MCafe [CID=131, mapName={KZ=Sumatra, RU=Sumatra, EN=Sumatra}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:52,996 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:52,996 [main] [MONGO] MCafe [CID=132, mapName={KZ=Томирис, RU=Томирис, EN=Tomiris}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:52,996 [main] [MONGO] save() MCafe [CID=132, mapName={KZ=Томирис, RU=Томирис, EN=Tomiris}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:53,183 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:53,183 [main] [MONGO] MCafe [CID=133, mapName={KZ=Пицца Хаус, RU=Пицца Хаус, EN=Pizza House}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:53,183 [main] [MONGO] save() MCafe [CID=133, mapName={KZ=Пицца Хаус, RU=Пицца Хаус, EN=Pizza House}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:53,364 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:53,364 [main] [MONGO] MCafe [CID=134, mapName={KZ=Водолей, RU=Водолей, EN=Vodolei}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:53,364 [main] [MONGO] save() MCafe [CID=134, mapName={KZ=Водолей, RU=Водолей, EN=Vodolei}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:53,556 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:53,556 [main] [MONGO] MCafe [CID=135, mapName={KZ=Андр, RU=Андр, EN=Andr}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:53,556 [main] [MONGO] save() MCafe [CID=135, mapName={KZ=Андр, RU=Андр, EN=Andr}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:53,762 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:53,762 [main] [MONGO] MCafe [CID=136, mapName={KZ=Royal, RU=Royal, EN=Royal}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:53,762 [main] [MONGO] save() MCafe [CID=136, mapName={KZ=Royal, RU=Royal, EN=Royal}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:53,954 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:53,954 [main] [MONGO] MCafe [CID=137, mapName={KZ=Bavarius, RU=Bavarius, EN=Bavarius}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:53,954 [main] [MONGO] save() MCafe [CID=137, mapName={KZ=Bavarius, RU=Bavarius, EN=Bavarius}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:54,146 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:54,146 [main] [MONGO] MCafe [CID=138, mapName={KZ=Тұран, RU=Туран, EN=Turan}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:54,146 [main] [MONGO] save() MCafe [CID=138, mapName={KZ=Тұран, RU=Туран, EN=Turan}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:54,338 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:54,338 [main] [MONGO] MCafe [CID=139, mapName={KZ=Кунжут, RU=Кунжут, EN=Sesame}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:54,338 [main] [MONGO] save() MCafe [CID=139, mapName={KZ=Кунжут, RU=Кунжут, EN=Sesame}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:54,531 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:54,531 [main] [MONGO] MCafe [CID=140, mapName={KZ=Мимино, RU=Мимино, EN=Mimino}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:54,531 [main] [MONGO] save() MCafe [CID=140, mapName={KZ=Мимино, RU=Мимино, EN=Mimino}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:54,723 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:54,723 [main] [MONGO] MCafe [CID=141, mapName={KZ=Marine, RU=Marine, EN=Marine}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:54,723 [main] [MONGO] save() MCafe [CID=141, mapName={KZ=Marine, RU=Marine, EN=Marine}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:54,915 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:54,915 [main] [MONGO] MCafe [CID=143, mapName={KZ=Алаколь, RU=Алаколь, EN=Alakol}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:54,915 [main] [MONGO] save() MCafe [CID=143, mapName={KZ=Алаколь, RU=Алаколь, EN=Alakol}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:55,107 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:55,107 [main] [MONGO] MCafe [CID=144, mapName={KZ=У тёщи, RU=У тёщи, EN=U teshi}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:55,121 [main] [MONGO] save() MCafe [CID=144, mapName={KZ=У тёщи, RU=У тёщи, EN=U teshi}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:55,313 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:55,313 [main] [MONGO] MCafe [CID=145, mapName={KZ=Strike, RU=Strike, EN=Strike}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:55,313 [main] [MONGO] save() MCafe [CID=145, mapName={KZ=Strike, RU=Strike, EN=Strike}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:55,505 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:55,505 [main] [MONGO] MCafe [CID=146, mapName={KZ=Strike, RU=Strike, EN=Strike}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:55,505 [main] [MONGO] save() MCafe [CID=146, mapName={KZ=Strike, RU=Strike, EN=Strike}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:55,697 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:55,697 [main] [MONGO] MCafe [CID=147, mapName={KZ=Альбион, RU=Альбион, EN=Albion}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:55,697 [main] [MONGO] save() MCafe [CID=147, mapName={KZ=Альбион, RU=Альбион, EN=Albion}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:55,889 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:55,889 [main] [MONGO] MCafe [CID=148, mapName={KZ=Сәтті, RU=Сәтті, EN=Satti}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:55,889 [main] [MONGO] save() MCafe [CID=148, mapName={KZ=Сәтті, RU=Сәтті, EN=Satti}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:56,081 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:56,081 [main] [MONGO] MCafe [CID=149, mapName={KZ=McKaeen, RU=McKaeen, EN=McKaeen}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:56,081 [main] [MONGO] save() MCafe [CID=149, mapName={KZ=McKaeen, RU=McKaeen, EN=McKaeen}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:56,287 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:56,287 [main] [MONGO] MCafe [CID=150, mapName={KZ=Dim Sum, RU=Dim Sum, EN=Dim Sum}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:56,287 [main] [MONGO] save() MCafe [CID=150, mapName={KZ=Dim Sum, RU=Dim Sum, EN=Dim Sum}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:56,479 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:56,479 [main] [MONGO] MCafe [CID=151, mapName={KZ=Ковчег, RU=Ковчег, EN=Ark}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:56,479 [main] [MONGO] save() MCafe [CID=151, mapName={KZ=Ковчег, RU=Ковчег, EN=Ark}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:56,671 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:56,671 [main] [MONGO] MCafe [CID=152, mapName={KZ=Тарон, RU=Тарон, EN=Taron}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:56,671 [main] [MONGO] save() MCafe [CID=152, mapName={KZ=Тарон, RU=Тарон, EN=Taron}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:56,863 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:56,863 [main] [MONGO] MCafe [CID=153, mapName={KZ=Kemer сити, RU=Kemer сити, EN=Kemer city}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:56,863 [main] [MONGO] save() MCafe [CID=153, mapName={KZ=Kemer сити, RU=Kemer сити, EN=Kemer city}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:57,056 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:57,056 [main] [MONGO] MCafe [CID=154, mapName={KZ=Эдем, RU=Эдем, EN=Edem}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:57,056 [main] [MONGO] save() MCafe [CID=154, mapName={KZ=Эдем, RU=Эдем, EN=Edem}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:57,248 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:57,248 [main] [MONGO] MCafe [CID=155, mapName={KZ=Робинзон, RU=Робинзон, EN=Robinson}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:57,261 [main] [MONGO] save() MCafe [CID=155, mapName={KZ=Робинзон, RU=Робинзон, EN=Robinson}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:57,454 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:57,454 [main] [MONGO] MCafe [CID=156, mapName={KZ=Троя, RU=Троя, EN=Troy}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:57,454 [main] [MONGO] save() MCafe [CID=156, mapName={KZ=Троя, RU=Троя, EN=Troy}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:57,632 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:57,632 [main] [MONGO] MCafe [CID=157, mapName={KZ=Жеруйық, RU=Жеруйык, EN=Zheruyk}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:57,632 [main] [MONGO] save() MCafe [CID=157, mapName={KZ=Жеруйық, RU=Жеруйык, EN=Zheruyk}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:57,824 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:57,824 [main] [MONGO] MCafe [CID=158, mapName={KZ=Охота, RU=Охота, EN=Hunting}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:57,824 [main] [MONGO] save() MCafe [CID=158, mapName={KZ=Охота, RU=Охота, EN=Hunting}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:58,030 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:58,030 [main] [MONGO] MCafe [CID=159, mapName={KZ=Айя, RU=Айя, EN=Aiya}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:58,030 [main] [MONGO] save() MCafe [CID=159, mapName={KZ=Айя, RU=Айя, EN=Aiya}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:58,222 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:58,222 [main] [MONGO] MCafe [CID=160, mapName={KZ=BON bar, RU=BON bar, EN=BON bar}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:58,222 [main] [MONGO] save() MCafe [CID=160, mapName={KZ=BON bar, RU=BON bar, EN=BON bar}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:58,414 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:58,414 [main] [MONGO] MCafe [CID=161, mapName={KZ=Wunder Bar, RU=Wunder Bar, EN=Wunder Bar}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:58,414 [main] [MONGO] save() MCafe [CID=161, mapName={KZ=Wunder Bar, RU=Wunder Bar, EN=Wunder Bar}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:58,606 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:58,606 [main] [MONGO] MCafe [CID=162, mapName={KZ=Зодиак, RU=Зодиак, EN=Zodiak}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:58,606 [main] [MONGO] save() MCafe [CID=162, mapName={KZ=Зодиак, RU=Зодиак, EN=Zodiak}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:58,798 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:58,798 [main] [MONGO] MCafe [CID=163, mapName={KZ=Дармен, RU=Дармен, EN=Darmen}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:58,798 [main] [MONGO] save() MCafe [CID=163, mapName={KZ=Дармен, RU=Дармен, EN=Darmen}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:58,990 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:58,990 [main] [MONGO] MCafe [CID=164, mapName={KZ=Бочка, RU=Бочка, EN=Bochka}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:58,990 [main] [MONGO] save() MCafe [CID=164, mapName={KZ=Бочка, RU=Бочка, EN=Bochka}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:59,183 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:59,183 [main] [MONGO] MCafe [CID=165, mapName={KZ=Boss, RU=Boss, EN=Boss}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:59,183 [main] [MONGO] save() MCafe [CID=165, mapName={KZ=Boss, RU=Boss, EN=Boss}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:59,375 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:59,375 [main] [MONGO] MCafe [CID=166, mapName={KZ=Скиф, RU=Скиф, EN=Scythian}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:59,375 [main] [MONGO] save() MCafe [CID=166, mapName={KZ=Скиф, RU=Скиф, EN=Scythian}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:59,594 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:59,594 [main] [MONGO] MCafe [CID=167, mapName={KZ=Алтын, RU=Алтын, EN=Altyn}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:59,594 [main] [MONGO] save() MCafe [CID=167, mapName={KZ=Алтын, RU=Алтын, EN=Altyn}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:59,786 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:59,786 [main] [MONGO] MCafe [CID=168, mapName={KZ=Кездесу, RU=Кездесу, EN=Kezdesu}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:59,786 [main] [MONGO] save() MCafe [CID=168, mapName={KZ=Кездесу, RU=Кездесу, EN=Kezdesu}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:37:59,979 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:37:59,979 [main] [MONGO] MCafe [CID=169, mapName={KZ=Assorti, RU=Assorti, EN=Assorti}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:37:59,979 [main] [MONGO] save() MCafe [CID=169, mapName={KZ=Assorti, RU=Assorti, EN=Assorti}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:00,171 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:00,171 [main] [MONGO] MCafe [CID=170, mapName={KZ=Ернұр, RU=Ернур, EN=Ernur}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:00,171 [main] [MONGO] save() MCafe [CID=170, mapName={KZ=Ернұр, RU=Ернур, EN=Ernur}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:00,377 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:00,377 [main] [MONGO] MCafe [CID=171, mapName={KZ=Айша, RU=Айша, EN=Aisha}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:00,377 [main] [MONGO] save() MCafe [CID=171, mapName={KZ=Айша, RU=Айша, EN=Aisha}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:00,569 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:00,569 [main] [MONGO] MCafe [CID=172, mapName={KZ=Алишер, RU=Алишер, EN=Alisher}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:00,569 [main] [MONGO] save() MCafe [CID=172, mapName={KZ=Алишер, RU=Алишер, EN=Alisher}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:00,761 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:00,761 [main] [MONGO] MCafe [CID=173, mapName={KZ=Достлуг, RU=Достлуг, EN=Dostlug}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:00,761 [main] [MONGO] save() MCafe [CID=173, mapName={KZ=Достлуг, RU=Достлуг, EN=Dostlug}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:00,953 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:00,953 [main] [MONGO] MCafe [CID=174, mapName={KZ=Нұрай, RU=Нурай, EN=Nurai}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:00,953 [main] [MONGO] save() MCafe [CID=174, mapName={KZ=Нұрай, RU=Нурай, EN=Nurai}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:01,145 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:01,145 [main] [MONGO] MCafe [CID=175, mapName={KZ=Фудзи Мега Актобе, RU=Фудзи Мега Актобе, EN=Fuji in Mega Aktobe}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:01,145 [main] [MONGO] save() MCafe [CID=175, mapName={KZ=Фудзи Мега Актобе, RU=Фудзи Мега Актобе, EN=Fuji in Mega Aktobe}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:01,337 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:01,337 [main] [MONGO] MCafe [CID=176, mapName={KZ=Фудзи Тропикаль, RU=Фудзи Тропикаль, EN=Fuji in Tropical}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:01,337 [main] [MONGO] save() MCafe [CID=176, mapName={KZ=Фудзи Тропикаль, RU=Фудзи Тропикаль, EN=Fuji in Tropical}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:01,529 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:01,529 [main] [MONGO] MCafe [CID=177, mapName={KZ=Бәйтерек, RU=Байтерек, EN=Baiterek}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:01,529 [main] [MONGO] save() MCafe [CID=177, mapName={KZ=Бәйтерек, RU=Байтерек, EN=Baiterek}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:01,735 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:01,735 [main] [MONGO] MCafe [CID=178, mapName={KZ=Арасан, RU=Арасан, EN=Arasan}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:01,735 [main] [MONGO] save() MCafe [CID=178, mapName={KZ=Арасан, RU=Арасан, EN=Arasan}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:01,927 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:01,927 [main] [MONGO] MCafe [CID=179, mapName={KZ=Inidium, RU=Inidium, EN=Inidium}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:01,927 [main] [MONGO] save() MCafe [CID=179, mapName={KZ=Inidium, RU=Inidium, EN=Inidium}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:02,119 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:02,119 [main] [MONGO] MCafe [CID=180, mapName={KZ=Ер-Алшын, RU=Ер-Алшын, EN=Er-Alshin}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:02,119 [main] [MONGO] save() MCafe [CID=180, mapName={KZ=Ер-Алшын, RU=Ер-Алшын, EN=Er-Alshin}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:02,325 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:02,325 [main] [MONGO] MCafe [CID=181, mapName={KZ=Ақ-Бота, RU=Ак-Бота, EN=Ak-Bota}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:02,325 [main] [MONGO] save() MCafe [CID=181, mapName={KZ=Ақ-Бота, RU=Ак-Бота, EN=Ak-Bota}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:02,504 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:02,504 [main] [MONGO] MCafe [CID=182, mapName={KZ=Жайсан, RU=Жайсан, EN=Zhaisan}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:02,504 [main] [MONGO] save() MCafe [CID=182, mapName={KZ=Жайсан, RU=Жайсан, EN=Zhaisan}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:02,709 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:02,709 [main] [MONGO] MCafe [CID=183, mapName={KZ=Самовар, RU=Самовар, EN=Samovar}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:02,709 [main] [MONGO] save() MCafe [CID=183, mapName={KZ=Самовар, RU=Самовар, EN=Samovar}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:02,902 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:02,902 [main] [MONGO] MCafe [CID=184, mapName={KZ=Ақ-Орда, RU=Ак-Орда, EN=Ak-Orda}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:02,902 [main] [MONGO] save() MCafe [CID=184, mapName={KZ=Ақ-Орда, RU=Ак-Орда, EN=Ak-Orda}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:03,094 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:03,094 [main] [MONGO] MCafe [CID=185, mapName={KZ=О'кей, RU=О'кей, EN=O'K}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:03,094 [main] [MONGO] save() MCafe [CID=185, mapName={KZ=О'кей, RU=О'кей, EN=O'K}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:03,286 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:03,286 [main] [MONGO] MCafe [CID=186, mapName={KZ=Азиз, RU=Азиз, EN=Aziz}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:03,286 [main] [MONGO] save() MCafe [CID=186, mapName={KZ=Азиз, RU=Азиз, EN=Aziz}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:03,478 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:03,478 [main] [MONGO] MCafe [CID=187, mapName={KZ=Нур, RU=Нур, EN=Nur}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:03,478 [main] [MONGO] save() MCafe [CID=187, mapName={KZ=Нур, RU=Нур, EN=Nur}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:03,670 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:03,670 [main] [MONGO] MCafe [CID=67, mapName={KZ=Адал, RU=Адал, EN=Adal}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:03,670 [main] [MONGO] save() MCafe [CID=67, mapName={KZ=Адал, RU=Адал, EN=Adal}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:03,862 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:03,862 [main] [MONGO] MCafe [CID=3, mapName={KZ=713 Bar&Grill, RU=713 Bar&Grill, EN=713 Bar&Grill}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:03,862 [main] [MONGO] save() MCafe [CID=3, mapName={KZ=713 Bar&Grill, RU=713 Bar&Grill, EN=713 Bar&Grill}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:04,068 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:04,068 [main] [MONGO] MCafe [CID=190, mapName={KZ=Лидер, RU=Лидер, EN=Lider}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:04,068 [main] [MONGO] save() MCafe [CID=190, mapName={KZ=Лидер, RU=Лидер, EN=Lider}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:04,288 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:04,288 [main] [MONGO] MCafe [CID=191, mapName={KZ=Жасмин, RU=Жасмин, EN=Jasmine}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:04,288 [main] [MONGO] save() MCafe [CID=191, mapName={KZ=Жасмин, RU=Жасмин, EN=Jasmine}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:04,480 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:04,480 [main] [MONGO] MCafe [CID=192, mapName={KZ=Желкен, RU=Желкен, EN=Zhelken}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:04,480 [main] [MONGO] save() MCafe [CID=192, mapName={KZ=Желкен, RU=Желкен, EN=Zhelken}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:04,686 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:04,686 [main] [MONGO] MCafe [CID=193, mapName={KZ=Kiparis, RU=Kiparis, EN=Kiparis}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:04,686 [main] [MONGO] save() MCafe [CID=193, mapName={KZ=Kiparis, RU=Kiparis, EN=Kiparis}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:04,878 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:04,878 [main] [MONGO] MCafe [CID=194, mapName={KZ=Колизей, RU=Колизей, EN=Colosseum}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:04,878 [main] [MONGO] save() MCafe [CID=194, mapName={KZ=Колизей, RU=Колизей, EN=Colosseum}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:05,056 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:05,056 [main] [MONGO] MCafe [CID=195, mapName={KZ=Ұлпан, RU=Улпан, EN=Ulpan}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:05,056 [main] [MONGO] save() MCafe [CID=195, mapName={KZ=Ұлпан, RU=Улпан, EN=Ulpan}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:05,234 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:05,248 [main] [MONGO] MCafe [CID=197, mapName={KZ=People's, RU=People's, EN=People's}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:05,248 [main] [MONGO] save() MCafe [CID=197, mapName={KZ=People's, RU=People's, EN=People's}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:05,440 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:05,440 [main] [MONGO] MCafe [CID=198, mapName={KZ=Идеал, RU=Идеал, EN=Ideal}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:05,440 [main] [MONGO] save() MCafe [CID=198, mapName={KZ=Идеал, RU=Идеал, EN=Ideal}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:05,632 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:05,632 [main] [MONGO] MCafe [CID=199, mapName={KZ=X.O, RU=X.O, EN=X.O}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:05,632 [main] [MONGO] save() MCafe [CID=199, mapName={KZ=X.O, RU=X.O, EN=X.O}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:05,825 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:05,825 [main] [MONGO] MCafe [CID=29, mapName={KZ=Ақ Босаға, RU=Ак Босага, EN=Ak bosaga}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:05,825 [main] [MONGO] save() MCafe [CID=29, mapName={KZ=Ақ Босаға, RU=Ак Босага, EN=Ak bosaga}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:06,017 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:06,017 [main] [MONGO] MCafe [CID=50, mapName={KZ=Ханшайым Сабина, RU=Принцесса Сабина, EN=Princess Sabina}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:06,017 [main] [MONGO] save() MCafe [CID=50, mapName={KZ=Ханшайым Сабина, RU=Принцесса Сабина, EN=Princess Sabina}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:06,209 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:06,209 [main] [MONGO] MCafe [CID=123, mapName={KZ=Ale house, RU=Ale House, EN=Alehouse}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:06,209 [main] [MONGO] save() MCafe [CID=123, mapName={KZ=Ale house, RU=Ale House, EN=Alehouse}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:06,401 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:06,401 [main] [MONGO] MCafe [CID=207, mapName={KZ=Golden Wood, RU=Golden Wood, EN=Golden Wood}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:06,401 [main] [MONGO] save() MCafe [CID=207, mapName={KZ=Golden Wood, RU=Golden Wood, EN=Golden Wood}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:06,593 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:06,593 [main] [MONGO] MCafe [CID=206, mapName={KZ=Time Cafe, RU=Time Cafe, EN=Time Cafe}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:06,593 [main] [MONGO] save() MCafe [CID=206, mapName={KZ=Time Cafe, RU=Time Cafe, EN=Time Cafe}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:06,771 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:06,771 [main] [MONGO] MCafe [CID=208, mapName={KZ=Nord-West, RU=Nord-West, EN=Nord-West}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:06,771 [main] [MONGO] save() MCafe [CID=208, mapName={KZ=Nord-West, RU=Nord-West, EN=Nord-West}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:06,977 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:06,977 [main] [MONGO] MCafe [CID=209, mapName={KZ=Замок Паб, RU=Замок Паб, EN=Pub Castle}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:06,977 [main] [MONGO] save() MCafe [CID=209, mapName={KZ=Замок Паб, RU=Замок Паб, EN=Pub Castle}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:07,186 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:07,186 [main] [MONGO] MCafe [CID=210, mapName={KZ=Life Style Club, RU=Life Style Club, EN=Life Style Club}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:07,186 [main] [MONGO] save() MCafe [CID=210, mapName={KZ=Life Style Club, RU=Life Style Club, EN=Life Style Club}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:07,397 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:07,397 [main] [MONGO] MCafe [CID=211, mapName={KZ=Дастур, RU=Дастур, EN=Dastur}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:07,397 [main] [MONGO] save() MCafe [CID=211, mapName={KZ=Дастур, RU=Дастур, EN=Dastur}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:07,622 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:07,622 [main] [MONGO] MCafe [CID=212, mapName={KZ=Фантом, RU=Фантом, EN=Phantom}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:07,622 [main] [MONGO] save() MCafe [CID=212, mapName={KZ=Фантом, RU=Фантом, EN=Phantom}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:07,832 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:07,832 [main] [MONGO] MCafe [CID=213, mapName={KZ=Меруерт, RU=Меруерт, EN=Meruert}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:07,832 [main] [MONGO] save() MCafe [CID=213, mapName={KZ=Меруерт, RU=Меруерт, EN=Meruert}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:08,042 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:08,042 [main] [MONGO] MCafe [CID=214, mapName={KZ=Жулдыз, RU=Жулдыз, EN=Zhuldyz}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:08,042 [main] [MONGO] save() MCafe [CID=214, mapName={KZ=Жулдыз, RU=Жулдыз, EN=Zhuldyz}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:08,253 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:08,253 [main] [MONGO] MCafe [CID=215, mapName={KZ=Пряник, RU=Пряник, EN=Pryanik}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:08,253 [main] [MONGO] save() MCafe [CID=215, mapName={KZ=Пряник, RU=Пряник, EN=Pryanik}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:08,478 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:08,478 [main] [MONGO] MCafe [CID=216, mapName={KZ=Спорт Бар El Clasico, RU=Спорт Бар El Clasico, EN=Sport Bar El Clasico}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:08,478 [main] [MONGO] save() MCafe [CID=216, mapName={KZ=Спорт Бар El Clasico, RU=Спорт Бар El Clasico, EN=Sport Bar El Clasico}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:08,688 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:08,688 [main] [MONGO] MCafe [CID=217, mapName={KZ=Спорт Бар 13 Sector, RU=Спорт Бар 13 Sector, EN=Sport Bar 13 Sector}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:08,688 [main] [MONGO] save() MCafe [CID=217, mapName={KZ=Спорт Бар 13 Sector, RU=Спорт Бар 13 Sector, EN=Sport Bar 13 Sector}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:08,899 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:08,899 [main] [MONGO] MCafe [CID=219, mapName={KZ=Береке, RU=Береке, EN=Bereke}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:08,899 [main] [MONGO] save() MCafe [CID=219, mapName={KZ=Береке, RU=Береке, EN=Bereke}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:09,124 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:09,124 [main] [MONGO] MCafe [CID=220, mapName={KZ=Лейла, RU=Лейла, EN=Leila}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:09,124 [main] [MONGO] save() MCafe [CID=220, mapName={KZ=Лейла, RU=Лейла, EN=Leila}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:09,334 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:09,334 [main] [MONGO] MCafe [CID=218, mapName={KZ=Фрикадель*Ка, RU=Фрикадель*Ка, EN=Frikadel*Ka}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:09,334 [main] [MONGO] save() MCafe [CID=218, mapName={KZ=Фрикадель*Ка, RU=Фрикадель*Ка, EN=Frikadel*Ka}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:09,485 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:09,485 [main] [MONGO] MCafe [CID=221, mapName={KZ=Тайқазан кафесі, RU=Тайказан кафе, EN=Taikazan cafe}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:09,485 [main] [MONGO] save() MCafe [CID=221, mapName={KZ=Тайқазан кафесі, RU=Тайказан кафе, EN=Taikazan cafe}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:09,680 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:09,680 [main] [MONGO] MCafe [CID=222, mapName={KZ=Зейнет, RU=Зейнет, EN=Zeinet}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:09,680 [main] [MONGO] save() MCafe [CID=222, mapName={KZ=Зейнет, RU=Зейнет, EN=Zeinet}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:09,890 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:09,890 [main] [MONGO] MCafe [CID=223, mapName={KZ=Тандырхана, RU=Тандырхана, EN=Tandyrhana}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:09,890 [main] [MONGO] save() MCafe [CID=223, mapName={KZ=Тандырхана, RU=Тандырхана, EN=Tandyrhana}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:10,115 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:10,115 [main] [MONGO] MCafe [CID=224, mapName={KZ=Burger King, RU=Burger King, EN=Burger King}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:10,115 [main] [MONGO] save() MCafe [CID=224, mapName={KZ=Burger King, RU=Burger King, EN=Burger King}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:10,326 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:10,326 [main] [MONGO] MCafe [CID=225, mapName={KZ=Арна, RU=Арна, EN=Arna}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:10,326 [main] [MONGO] save() MCafe [CID=225, mapName={KZ=Арна, RU=Арна, EN=Arna}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:10,536 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:10,536 [main] [MONGO] MCafe [CID=226, mapName={KZ=Реванш, RU=Реванш, EN=Revansh}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:10,536 [main] [MONGO] save() MCafe [CID=226, mapName={KZ=Реванш, RU=Реванш, EN=Revansh}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:10,746 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:10,746 [main] [MONGO] MCafe [CID=227, mapName={KZ=Ак-Отау, RU=Ак-Отау, EN=Ak-Otau}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:10,746 [main] [MONGO] save() MCafe [CID=227, mapName={KZ=Ак-Отау, RU=Ак-Отау, EN=Ak-Otau}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:10,972 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:10,972 [main] [MONGO] MCafe [CID=228, mapName={KZ=Шмукер, RU=Шмукер, EN=Shmuker}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:10,972 [main] [MONGO] save() MCafe [CID=228, mapName={KZ=Шмукер, RU=Шмукер, EN=Shmuker}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:11,182 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:11,182 [main] [MONGO] MCafe [CID=229, mapName={KZ=Хижина, RU=Хижина, EN=Hut}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:11,182 [main] [MONGO] save() MCafe [CID=229, mapName={KZ=Хижина, RU=Хижина, EN=Hut}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:11,407 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:11,407 [main] [MONGO] MCafe [CID=230, mapName={KZ=Алтын Гасыр, RU=Алтын Гасыр, EN=Golden Age}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:11,407 [main] [MONGO] save() MCafe [CID=230, mapName={KZ=Алтын Гасыр, RU=Алтын Гасыр, EN=Golden Age}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:11,618 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:11,618 [main] [MONGO] MCafe [CID=231, mapName={KZ=Avenue, RU=Avenue, EN=Avenue}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:11,618 [main] [MONGO] save() MCafe [CID=231, mapName={KZ=Avenue, RU=Avenue, EN=Avenue}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:11,828 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:11,828 [main] [MONGO] MCafe [CID=232, mapName={KZ=Дәстүр үйі, RU=Дәстүр үйі, EN=Dastyr ui}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:11,828 [main] [MONGO] save() MCafe [CID=232, mapName={KZ=Дәстүр үйі, RU=Дәстүр үйі, EN=Dastyr ui}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:12,053 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:12,053 [main] [MONGO] MCafe [CID=233, mapName={KZ=Япончик, RU=Япончик, EN=Yaponchik}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:12,053 [main] [MONGO] save() MCafe [CID=233, mapName={KZ=Япончик, RU=Япончик, EN=Yaponchik}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:12,264 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:12,264 [main] [MONGO] MCafe [CID=49, mapName={KZ=Slavyanka, RU=Slavyanka, EN=Slavyanka}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:12,264 [main] [MONGO] save() MCafe [CID=49, mapName={KZ=Slavyanka, RU=Slavyanka, EN=Slavyanka}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:12,429 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:12,429 [main] [MONGO] MCafe [CID=234, mapName={KZ=Coffee Like, RU=Coffee Like, EN=Coffee Like}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:12,429 [main] [MONGO] save() MCafe [CID=234, mapName={KZ=Coffee Like, RU=Coffee Like, EN=Coffee Like}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:12,639 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:12,639 [main] [MONGO] MCafe [CID=236, mapName={KZ=Ханрат, RU=Ханрат, EN=Hanrat}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:12,639 [main] [MONGO] save() MCafe [CID=236, mapName={KZ=Ханрат, RU=Ханрат, EN=Hanrat}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:12,849 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:12,849 [main] [MONGO] MCafe [CID=237, mapName={KZ=Виктория, RU=Виктория, EN=Viktoriya}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:12,849 [main] [MONGO] save() MCafe [CID=237, mapName={KZ=Виктория, RU=Виктория, EN=Viktoriya}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:13,075 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:13,075 [main] [MONGO] MCafe [CID=238, mapName={KZ=Юрта, RU=Юрта, EN=Yurta}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:13,075 [main] [MONGO] save() MCafe [CID=238, mapName={KZ=Юрта, RU=Юрта, EN=Yurta}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:13,285 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:13,285 [main] [MONGO] MCafe [CID=239, mapName={KZ=Sumatra Coffee Bar, RU=Sumatra Coffee Bar, EN=Sumatra Coffee Bar}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:13,285 [main] [MONGO] save() MCafe [CID=239, mapName={KZ=Sumatra Coffee Bar, RU=Sumatra Coffee Bar, EN=Sumatra Coffee Bar}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:13,495 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:13,495 [main] [MONGO] MCafe [CID=240, mapName={KZ=Тблисо, RU=Тблисо, EN=Tbliso}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:13,495 [main] [MONGO] save() MCafe [CID=240, mapName={KZ=Тблисо, RU=Тблисо, EN=Tbliso}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:13,706 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:13,706 [main] [MONGO] MCafe [CID=241, mapName={KZ=Азия, RU=Азия, EN=Asia}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:13,706 [main] [MONGO] save() MCafe [CID=241, mapName={KZ=Азия, RU=Азия, EN=Asia}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:13,916 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:13,916 [main] [MONGO] MCafe [CID=242, mapName={KZ=Три медведя, RU=Три медведя, EN=Three bears}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:13,916 [main] [MONGO] save() MCafe [CID=242, mapName={KZ=Три медведя, RU=Три медведя, EN=Three bears}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:14,141 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:14,141 [main] [MONGO] MCafe [CID=243, mapName={KZ=The Wall Steak House, RU=The Wall Steak House, EN=The Wall Steak House}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:14,141 [main] [MONGO] save() MCafe [CID=243, mapName={KZ=The Wall Steak House, RU=The Wall Steak House, EN=The Wall Steak House}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:14,352 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:14,352 [main] [MONGO] MCafe [CID=244, mapName={KZ=Голосящий Кивин, RU=Голосящий Кивин, EN=Golosyashii kivin}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:14,352 [main] [MONGO] save() MCafe [CID=244, mapName={KZ=Голосящий Кивин, RU=Голосящий Кивин, EN=Golosyashii kivin}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:14,562 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:14,562 [main] [MONGO] MCafe [CID=245, mapName={KZ=BEERлога, RU=BEERлога, EN=BEERлога}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:14,562 [main] [MONGO] save() MCafe [CID=245, mapName={KZ=BEERлога, RU=BEERлога, EN=BEERлога}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:14,772 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:14,772 [main] [MONGO] MCafe [CID=246, mapName={KZ=Шәйхана, RU=Чайхана, EN=Chaihana}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:14,772 [main] [MONGO] save() MCafe [CID=246, mapName={KZ=Шәйхана, RU=Чайхана, EN=Chaihana}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:14,998 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:14,998 [main] [MONGO] MCafe [CID=83, mapName={KZ=Очаг, RU=Очаг, EN=Ochag}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:14,998 [main] [MONGO] save() MCafe [CID=83, mapName={KZ=Очаг, RU=Очаг, EN=Ochag}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:15,148 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:15,148 [main] [MONGO] MCafe [CID=250, mapName={KZ=Мулатка, RU=Мулатка, EN=Мулатка}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:15,148 [main] [MONGO] save() MCafe [CID=250, mapName={KZ=Мулатка, RU=Мулатка, EN=Мулатка}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:15,373 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:15,373 [main] [MONGO] MCafe [CID=248, mapName={KZ=Diamond, RU=Diamond, EN=Diamond}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:15,373 [main] [MONGO] save() MCafe [CID=248, mapName={KZ=Diamond, RU=Diamond, EN=Diamond}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:15,448 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:15,448 [main] [MONGO] MCafe [CID=249, mapName={KZ=Три самурая, RU=Три самурая, EN=Three samurai}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:15,448 [main] [MONGO] save() MCafe [CID=249, mapName={KZ=Три самурая, RU=Три самурая, EN=Three samurai}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:15,658 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:15,658 [main] [MONGO] MCafe [CID=251, mapName={KZ=Vincent Vega & Jules`s Bar, RU=Vincent Vega & Jules`s Bar, EN=Vincent Vega & Jules`s Bar}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:15,658 [main] [MONGO] save() MCafe [CID=251, mapName={KZ=Vincent Vega & Jules`s Bar, RU=Vincent Vega & Jules`s Bar, EN=Vincent Vega & Jules`s Bar}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:15,884 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:15,884 [main] [MONGO] MCafe [CID=142, mapName={KZ=Царская охота, RU=Царская охота, EN=Royal hunting}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:15,884 [main] [MONGO] save() MCafe [CID=142, mapName={KZ=Царская охота, RU=Царская охота, EN=Royal hunting}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:16,094 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + +2015-05-05 01:38:16,094 [main] [MONGO] MCafe [CID=196, mapName={KZ=Charlie, RU=Charlie, EN=Charlie}] +[TRACE kz.cafe.db.MongoService save.62 ] + +2015-05-05 01:38:16,094 [main] [MONGO] save() MCafe [CID=196, mapName={KZ=Charlie, RU=Charlie, EN=Charlie}] +[TRACE kz.cafe.db.MongoService save.94 ] + +2015-05-05 01:38:16,259 [main] [MONGO] ok +[TRACE kz.cafe.db.MongoService save.100 ] + diff --git a/kz_cafe_core/src/META-INF/MANIFEST.MF b/kz_cafe_core/src/META-INF/MANIFEST.MF new file mode 100644 index 0000000..5e94951 --- /dev/null +++ b/kz_cafe_core/src/META-INF/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Class-Path: + diff --git a/kz_cafe_core/src/kz/cafe/DbExport.java b/kz_cafe_core/src/kz/cafe/DbExport.java new file mode 100644 index 0000000..97ec513 --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/DbExport.java @@ -0,0 +1,367 @@ +package kz.cafe; + +import java.io.*; +import java.lang.reflect.*; +import java.sql.*; +import java.text.*; +import java.util.*; +import java.util.Date; +import java.util.concurrent.atomic.*; +import kz.cafe.cache.*; +import kz.cafe.constants.*; +import kz.cafe.constants.InterfaceConstants.LANGS; +import kz.cafe.db.*; +import kz.cafe.db.model.*; +import kz.cafe.db.model.anotations.*; + + + +@SuppressWarnings("rawtypes") +public class DbExport{ + + @SuppressWarnings("unchecked") + public static final void export(String sPath, + Map map, + InterfaceConstants.LANGS lang){ + + OnePassCache onePassCache = new OnePassCache(); + + Connection c = null; + Statement stmt = null; + try{ + Class.forName("org.sqlite.JDBC"); + + SimpleDateFormat sdf = new SimpleDateFormat("YYYYMMdd"); + + String sFullPath = sPath + "/" + sdf.format(new Date()) + "_" + lang + ".sqlite"; + + File file = new File(sFullPath); + file.delete(); + + c = DriverManager.getConnection("jdbc:sqlite:" + sFullPath); + + stmt = c.createStatement(); + + for(String sTableName : map.keySet()){ + StringBuilder sbSQL = new StringBuilder(""); + + for(Field field : map.get(sTableName).getFields()){ + if(field.getAnnotation(AnnotationNotExported.class) == null){ + + String sFieldName = field.getName().toLowerCase(); + if(field.getAnnotation(AnnotationIncusiveList.class) == null){ + if(sbSQL.length() > 0){ + sbSQL.append(" , "); + } + + if("id".equals(sFieldName)){ + sbSQL.append("id int PRIMARY KEY NOT NULL"); + + } + else{ + addFieldStructure(field, sFieldName, sbSQL); + + AnnotationExport annotationExport = field.getAnnotation(AnnotationExport.class); + + if(annotationExport == null){ + } + else{ + String[] arrstrFields = annotationExport.column().split(","); + for(String sFieldRelated : arrstrFields){ + if(sbSQL.length() > 0){ + sbSQL.append(" , "); + } + + sFieldRelated = sFieldRelated.trim(); + + Field fieldRealted = annotationExport.foreign().getField(sFieldRelated); + addFieldStructure(fieldRealted, annotationExport.local_prefix() + sFieldRelated, sbSQL); + } + } + } + } + else{ + String sql = "CREATE TABLE " + sTableName + "2" + sFieldName + "(" + + sTableName + " int NOT NULL, " + + sFieldName + " int NOT NULL)"; + stmt.executeUpdate(sql); + } + } + } + String sSQL = "CREATE TABLE " + sTableName + " " + "(" + sbSQL.toString() + ")"; + stmt.executeUpdate(sSQL); + stmt.close(); + + + + + + StringBuilder sbFields = new StringBuilder(); + StringBuilder sbValues = new StringBuilder(); + + for(Field field : map.get(sTableName).getFields()){ + if(field.getAnnotation(AnnotationNotExported.class) == null){ + + String sFieldName = field.getName().toLowerCase(); + if(field.getAnnotation(AnnotationIncusiveList.class) == null){ + if("id".equals(sFieldName)){ + if(sbFields.length() > 0){ + sbFields.append(" , "); + } + if(sbValues.length() > 0){ + sbValues.append(" , "); + } + + sbFields.append(sFieldName); + sbValues.append("?"); + } + else{ + if(sbFields.length() > 0){ + sbFields.append(" , "); + } + if(sbValues.length() > 0){ + sbValues.append(" , "); + } + + addPrep(sbFields, sbValues, field, sFieldName); + + AnnotationExport annotationExport = field.getAnnotation(AnnotationExport.class); + + if(annotationExport == null){ + } + else{ + String[] arrstrFields = annotationExport.column().split(","); + for(String sFieldRelated : arrstrFields){ + if(sbFields.length() > 0){ + sbFields.append(" , "); + } + if(sbValues.length() > 0){ + sbValues.append(" , "); + } + + + sFieldRelated = sFieldRelated.trim(); + + Field fieldRealted = annotationExport.foreign().getField(sFieldRelated); + + addPrep(sbFields, sbValues, fieldRealted, annotationExport.local_prefix() + sFieldRelated); + } + } + } + } + else{ + //sbFields.append(sFieldName); + //sbValues.append("?"); + } + } + } + + System.out.println(); + + PreparedStatement prep = + c.prepareStatement("insert into " + sTableName + "(" + sbFields.toString() + ") values (" + sbValues.toString() + ");"); + + c.setAutoCommit(false); + + Set setProcessed = new HashSet(); + + for(Object obj : MongoService.ds.find(map.get(sTableName)).order(MAbstractDataElement.F_ID)){ + + int ID = obj.getClass().getField("ID").getInt(obj); + + if(setProcessed.contains(ID)){ + continue; + } + + setProcessed.add(ID); + + + AtomicInteger iCounter = new AtomicInteger(1); + for(Field field : map.get(sTableName).getFields()){ + + if(field.getAnnotation(AnnotationNotExported.class) == null){ + + String sFieldName = field.getName().toLowerCase(); + if(field.getAnnotation(AnnotationIncusiveList.class) == null){ + if("id".equals(sFieldName)){ + + System.out.println(map.get(sTableName).getSimpleName() + " id=" + field.getLong(obj)); + + prep.setLong(iCounter.get(), field.getLong(obj)); + + iCounter.incrementAndGet(); + } + else{ + Object value = field.get(obj); + addFieldValue(prep, field, iCounter, value, lang); + + iCounter.incrementAndGet(); + + AnnotationExport annotationExport = field.getAnnotation(AnnotationExport.class); + + if(annotationExport == null){ + } + else{ + String[] arrstrFields = annotationExport.column().split(","); + for(String sFieldRelated : arrstrFields){ + sFieldRelated = sFieldRelated.trim(); + + Field fieldRealted = annotationExport.foreign().getField(sFieldRelated); + + int ID_RELATED = field.getInt(obj); + + addFieldValue(prep, + fieldRealted, + iCounter, + onePassCache.getValue(annotationExport.foreign(), ID_RELATED, sFieldRelated), + lang); + + iCounter.incrementAndGet(); + } + } + } + + } + else{ + Set setValues = (Set) field.get(obj); + + PreparedStatement prepFK = + c.prepareStatement("insert into " + sTableName + "2" + sFieldName + " values (?, ?);"); + + for(Integer FK : setValues){ + prepFK.setInt(1, obj.getClass().getField("ID").getInt(obj)); + prepFK.setInt(2, (int) FK); + + prepFK.executeUpdate(); + } + } + } + } + prep.executeUpdate(); + } + c.commit(); + } + c.close(); + } + catch (Exception e){ + throw new Error(e); + } + + // for(Object obj : MongoService.ds.find(clas).offset(iCounter).asList()){ + // + // + // + // iCounter += FRAME; + // } + } + + + + + private static void addFieldStructure(Field field, String sLocalName, StringBuilder sbSQL){ + if(field.getAnnotation(AnnotationMultiLangString.class) == null) { + String sClassName = field.getGenericType().toString().toLowerCase(); + + sbSQL.append(" " + sLocalName + " "); + + if(sClassName.startsWith("int") || sClassName.endsWith("integer")){ + sbSQL.append(" int "); + } + else if(sClassName.startsWith("long")){ + sbSQL.append(" int "); + } + else if(sClassName.startsWith("bool")){ + sbSQL.append(" bool "); + } + else if(sClassName.startsWith("double")){ + } + else{ + sbSQL.append(" text "); + } + } + else{ + sbSQL.append(" " + sLocalName + " "); + sbSQL.append(" text "); + + if(field.isAnnotationPresent(AnnotationNoExportIndex.class)) { + } + else { + sbSQL.append(" , "); + sbSQL.append(" " + sLocalName + "_ "); + sbSQL.append(" text "); + } + } + } + + + + private static void addPrep(StringBuilder sbFields, + StringBuilder sbValues, + Field field, + String sFieldName){ + if(field.getAnnotation(AnnotationMultiLangString.class) == null) { + sbFields.append(sFieldName); + sbValues.append("?"); + } + else{ + if(field.isAnnotationPresent(AnnotationNoExportIndex.class)) { + sbFields.append(sFieldName); + sbValues.append("?"); + } + else { + sbFields.append(sFieldName + "," + sFieldName + "_"); + sbValues.append("?,?"); + } + } + } + + + + private static void addFieldValue(PreparedStatement prep, + Field field, + AtomicInteger iCounter, + Object value, + InterfaceConstants.LANGS lang) throws Exception{ + if(field.getAnnotation(AnnotationMultiLangString.class) == null) { + String sClassName = field.getGenericType().toString().toLowerCase(); + + try { + if(value == null) { + //let's set nothing here + } + else if(sClassName.startsWith("int") || sClassName.endsWith("integer")){ + prep.setInt(iCounter.get(), (Integer) value); + } + else if(sClassName.startsWith("long")){ + prep.setLong(iCounter.get(), (Long) value); + } + else if(sClassName.startsWith("bool")){ + prep.setBoolean(iCounter.get(), (Boolean) value); + } + else if(sClassName.startsWith("double")){ + } + else{ + prep.setString(iCounter.get(), "" + value); + } + } + catch(Throwable e) { + System.out.println(value + "=" + field); + e.printStackTrace(); + } + } + else{ + @SuppressWarnings("unchecked") + Map mapValue = (Map) value; + + prep.setString(iCounter.get(), "" + mapValue.get(lang)); + + if(field.isAnnotationPresent(AnnotationNoExportIndex.class)) { + } + else { + iCounter.incrementAndGet(); + prep.setString(iCounter.get(), ("" + mapValue.get(lang)).toLowerCase()); + } + } + + } +} diff --git a/kz_cafe_core/src/kz/cafe/Export.java b/kz_cafe_core/src/kz/cafe/Export.java new file mode 100644 index 0000000..bbcbe45 --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/Export.java @@ -0,0 +1,30 @@ +package kz.cafe; + +import java.util.*; +import kz.cafe.constants.*; +import kz.cafe.db.model.*; + +public class Export{ + @SuppressWarnings("rawtypes") + + public static void main(String[] args){ + HashMap map = new HashMap(); + + map.put("feedback", MFeedback.class); + map.put("cafe", MCafe.class); + map.put("ingredient", MIngredient.class); + map.put("course", MCourse.class); + map.put("sale", MSale.class); + map.put("news", MNews.class); + map.put("service_types", MServiceType.class); + map.put("cafe_types", MCafeType.class); + map.put("course_category", MCafeType.class); + map.put("city", MCity.class); + map.put("phone", MPhone.class); + map.put("cafe_image", MCafeImage.class); + + for(InterfaceConstants.LANGS lang : InterfaceConstants.LANGS.values()) { + DbExport.export(args[0], map, lang); + } + } +} diff --git a/kz_cafe_core/src/kz/cafe/FuckFeedbacks.java b/kz_cafe_core/src/kz/cafe/FuckFeedbacks.java new file mode 100644 index 0000000..3afcd46 --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/FuckFeedbacks.java @@ -0,0 +1,75 @@ +package kz.cafe; + +import java.io.*; +import kz.cafe.constants.*; +import kz.cafe.db.*; +import kz.cafe.db.model.*; + +public class FuckFeedbacks{ + + /** + * @param args + * @throws UserNotFoundException + */ + + private static BufferedReader in; + + public static void main(String[] args) throws Exception{ + + in = new BufferedReader(new InputStreamReader(new FileInputStream(args[0]), "UTF8")); + + + for(MCafe mCafe : MongoService.getList(MCafe.class)) { + + for(int f = 0; f < 15; f++) { + MFeedback mFeedback = new MFeedback(); + mFeedback.ID = MongoService.getUniqueID(MFeedback.class); + + String sLine = readLine(); + + System.out.println(sLine); + + for(InterfaceConstants.LANGS lang : InterfaceConstants.LANGS.values()) { + mFeedback.text.put(lang, sLine); + } + mFeedback.CID = mCafe.ID; + MongoService.save(mFeedback); + } + } + } + + + + + + private static String readLine() throws FileNotFoundException{ + + while (true){ + try{ + + StringBuilder sbBuilder = new StringBuilder(); + + int iCounter = 0; + while (iCounter < 10){ + + String sLine = in.readLine(); + + if(sLine == null){ + in = new BufferedReader(new InputStreamReader(new FileInputStream("c:/1.txt"), "UTF8")); + continue; + } + + sbBuilder.append(sLine); + + iCounter++; + } + + return sbBuilder.toString(); + } + catch (IOException e){ + break; + } + } + return null; + } +} diff --git a/kz_cafe_core/src/kz/cafe/InitAdmin.java b/kz_cafe_core/src/kz/cafe/InitAdmin.java new file mode 100644 index 0000000..3940860 --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/InitAdmin.java @@ -0,0 +1,56 @@ +package kz.cafe; + +import kz.cafe.constants.*; +import kz.cafe.db.*; +import kz.cafe.db.model.*; +import kz.cafe.db.service.*; +import kz.cafe.exceptions.*; + +public class InitAdmin{ + + /** + * @param args + * @throws UserNotFoundException + */ + public static void main(String[] args) throws Exception{ + MUser mUser; + try{ + mUser = MongoUserService.getUserProfile(0); + } + catch (Exception e){ + mUser = new MUser(); + } + + mUser.ID = 0; + mUser.login = "admin"; + mUser.password = "L{Llmhut[2"; + mUser.role = 0; + mUser.canUseGUI = true; + mUser.name = "Administrator"; + + MongoUserService.save(mUser); + + + + + MRole mRoleRead = MongoService.get(MRole.class, 0); + + if(mRoleRead == null) { + mRoleRead = new MRole(); + } + + mRoleRead.ID = 0; + mRoleRead.name.put(InterfaceConstants.LANGS.RU, "Administrator"); + mRoleRead.name.put(InterfaceConstants.LANGS.EN, "Администратор"); + mRoleRead.name.put(InterfaceConstants.LANGS.KZ, "Администратор"); + + for(int f = 0; f < 200; f++){ + mRoleRead.screenRead.add(f); + mRoleRead.screenAdd.add(f); + mRoleRead.screenEdit.add(f); + mRoleRead.screenDelete.add(f); + } + + MongoService.save(mRoleRead); + } +} diff --git a/kz_cafe_core/src/kz/cafe/TestMassLoad.java b/kz_cafe_core/src/kz/cafe/TestMassLoad.java new file mode 100644 index 0000000..ad49c26 --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/TestMassLoad.java @@ -0,0 +1,74 @@ +package kz.cafe; + +import kz.cafe.constants.*; +import kz.cafe.db.*; +import kz.cafe.db.model.*; +import kz.cafe.exceptions.*; + +public class TestMassLoad{ + + /** + * @param args + * @throws UserNotFoundException + */ + public static void main(String[] args) throws Exception{ + + for(int f = 0; f < 20; f++){ + MCafeType mCafeType = new MCafeType(); + mCafeType.ID = MongoService.getUniqueID(MCafeType.class); + mCafeType.name.put(InterfaceConstants.LANGS.RU, "категория" + f); + mCafeType.name.put(InterfaceConstants.LANGS.EN, "category " + f); + mCafeType.name.put(InterfaceConstants.LANGS.KZ, "фырк-фырк " + f); + MongoService.save(mCafeType); + + for(int i = 0; i < 50; i++){ + MCafe mCafe = new MCafe(); + mCafe.ID = MongoService.getUniqueID(MCafe.class); + mCafe.name.put(InterfaceConstants.LANGS.RU, "кафе" + (f * 1000) + i); + mCafe.name.put(InterfaceConstants.LANGS.EN, "cafe " + (f * 1000) + i); + mCafe.name.put(InterfaceConstants.LANGS.KZ, "чай-хана " + (f * 1000) + i); + + mCafe.types.add(mCafeType.ID); + mCafe.city = 4; + mCafe.image = "17.jpg"; + MongoService.save(mCafe); + } + } + + + for(MCafe mCafe : MongoService.getList(MCafe.class)){ + MSale mSale = new MSale(); + mSale.ID = MongoService.getUniqueID(MSale.class); + mSale.CID = mCafe.ID; + mSale.name.put(InterfaceConstants.LANGS.RU, "акция" + System.currentTimeMillis()); + mSale.name.put(InterfaceConstants.LANGS.EN, "акция " + System.currentTimeMillis()); + mSale.name.put(InterfaceConstants.LANGS.KZ, "акция " + System.currentTimeMillis()); + mSale.image = "41.jpg"; + MongoService.save(mSale); + + MSale mSale2 = new MSale(); + mSale2.ID = MongoService.getUniqueID(MSale.class); + mSale2.CID = mCafe.ID; + mSale2.name.put(InterfaceConstants.LANGS.RU, "акция" + System.currentTimeMillis()); + mSale2.name.put(InterfaceConstants.LANGS.EN, "акция " + System.currentTimeMillis()); + mSale2.name.put(InterfaceConstants.LANGS.KZ, "акция " + System.currentTimeMillis()); + mSale2.image = "44.jpg"; + MongoService.save(mSale2); + + + for(int i = 0; i < 50; i++) { + MFeedback mFeedback = new MFeedback(); + mFeedback.ID = MongoService.getUniqueID(MFeedback.class); + + mFeedback.CID = mCafe.ID; + mFeedback.rate = new Double(Math.random() * 4).intValue(); + + mFeedback.text.put(InterfaceConstants.LANGS.RU, "Отзыв" + System.currentTimeMillis()); + mFeedback.text.put(InterfaceConstants.LANGS.EN, "Отзыв" + System.currentTimeMillis()); + mFeedback.text.put(InterfaceConstants.LANGS.KZ, "Отзыв" + System.currentTimeMillis()); + + MongoService.save(mFeedback); + } + } + } +} diff --git a/kz_cafe_core/src/kz/cafe/TestMassLoad_Dedicated.java b/kz_cafe_core/src/kz/cafe/TestMassLoad_Dedicated.java new file mode 100644 index 0000000..90aee30 --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/TestMassLoad_Dedicated.java @@ -0,0 +1,143 @@ +package kz.cafe; + +import kz.cafe.db.*; +import kz.cafe.db.model.*; +import kz.cafe.exceptions.*; + +public class TestMassLoad_Dedicated{ + + /** + * @param args + * @throws UserNotFoundException + */ + public static void main(String[] args) throws Exception{ + + MCafe mCafe = MongoService.get(MCafe.class, 1); + MSale mSale = MongoService.get(MSale.class, 1); + MNews mNews = MongoService.get(MNews.class, 1); + MFeedback mFeedback = MongoService.get(MFeedback.class, 1); + + for(int f = 0; f < 300; f++){ + MCafe mCafeNew = new MCafe(); + mCafeNew.ID = MongoService.getUniqueID(MCafe.class); + mCafeNew.city = mCafe.city; + mCafeNew.coordinates = mCafe.coordinates; + mCafeNew.description = mCafe.description; + mCafeNew.image = mCafe.image; + mCafeNew.name = mCafe.name; + mCafeNew.ownerID = mCafe.ownerID; + mCafeNew.phone = mCafe.phone; + mCafeNew.price = mCafe.price; + mCafeNew.rate = mCafe.rate; + mCafeNew.service = mCafe.service; + mCafeNew.timeClose = mCafe.timeClose; + mCafeNew.timeOpen = mCafe.timeOpen; + mCafeNew.types = mCafe.types; + + MongoService.save(mCafeNew); + + + + + + MSale mSaleNew = new MSale(); + mSaleNew.ID = MongoService.getUniqueID(MSale.class); + mSaleNew.date_from = mSale.date_from; + mSaleNew.date_to = mSale.date_to; + mSaleNew.date_notification = mSale.date_notification; + mSaleNew.image = mSale.image; + mSaleNew.name = mSale.name; + mSaleNew.description = mSale.description; + mSaleNew.CID = mCafeNew.ID; + MongoService.save(mSaleNew); + + + MNews mNewsNew = new MNews(); + mNewsNew.ID = MongoService.getUniqueID(MNews.class); + mNewsNew.date_notification = mNews.date_notification; + mNewsNew.image = mNews.image; + mNewsNew.name = mNews.name; + mNewsNew.description = mNews.description; + mNewsNew.CID = mCafeNew.ID; + MongoService.save(mNewsNew); + + + + MFeedback mFeedbackNew = new MFeedback(); + mFeedbackNew.ID = MongoService.getUniqueID(MFeedback.class); + mFeedbackNew.ownerID = mFeedback.ownerID; + mFeedbackNew.rate = mFeedback.rate; + mFeedbackNew.text = mFeedback.text; + mFeedbackNew.UID = mFeedback.UID; + mFeedbackNew.CID = mCafeNew.ID; + MongoService.save(mFeedbackNew); + } + + + + + +// for(int f = 0; f < 20; f++){ +// MCafeType mCafeType = new MCafeType(); +// mCafeType.ID = MongoService.getUniqueID(MCafeType.class); +// mCafeType.name.put(InterfaceConstants.LANGS.RU, "категория" + f); +// mCafeType.name.put(InterfaceConstants.LANGS.EN, "category " + f); +// mCafeType.name.put(InterfaceConstants.LANGS.UA, "хрю-хрю " + f); +// mCafeType.name.put(InterfaceConstants.LANGS.KZ, "фырк-фырк " + f); +// MongoService.save(mCafeType); +// +// for(int i = 0; i < 50; i++){ +// MCafe mCafe = new MCafe(); +// mCafe.ID = MongoService.getUniqueID(MCafe.class); +// mCafe.name.put(InterfaceConstants.LANGS.RU, "кафе" + (f * 1000) + i); +// mCafe.name.put(InterfaceConstants.LANGS.EN, "cafe " + (f * 1000) + i); +// mCafe.name.put(InterfaceConstants.LANGS.UA, "харчевня " + (f * 1000) + i); +// mCafe.name.put(InterfaceConstants.LANGS.KZ, "чай-хана " + (f * 1000) + i); +// +// mCafe.type = mCafeType.ID; +// mCafe.city = 4; +// mCafe.image = "17.jpg"; +// MongoService.save(mCafe); +// } +// } +// +// +// for(MCafe mCafe : MongoService.getList(MCafe.class)){ +// MSale mSale = new MSale(); +// mSale.ID = MongoService.getUniqueID(MSale.class); +// mSale.CID = mCafe.ID; +// mSale.name.put(InterfaceConstants.LANGS.RU, "акция" + System.currentTimeMillis()); +// mSale.name.put(InterfaceConstants.LANGS.EN, "акция " + System.currentTimeMillis()); +// mSale.name.put(InterfaceConstants.LANGS.UA, "акция " + System.currentTimeMillis()); +// mSale.name.put(InterfaceConstants.LANGS.KZ, "акция " + System.currentTimeMillis()); +// mSale.image = "41.jpg"; +// MongoService.save(mSale); +// +// MSale mSale2 = new MSale(); +// mSale2.ID = MongoService.getUniqueID(MSale.class); +// mSale2.CID = mCafe.ID; +// mSale2.name.put(InterfaceConstants.LANGS.RU, "акция" + System.currentTimeMillis()); +// mSale2.name.put(InterfaceConstants.LANGS.EN, "акция " + System.currentTimeMillis()); +// mSale2.name.put(InterfaceConstants.LANGS.UA, "акция " + System.currentTimeMillis()); +// mSale2.name.put(InterfaceConstants.LANGS.KZ, "акция " + System.currentTimeMillis()); +// mSale2.image = "44.jpg"; +// MongoService.save(mSale2); +// +// +// for(int i = 0; i < 50; i++) { +// MFeedback mFeedback = new MFeedback(); +// mFeedback.ID = MongoService.getUniqueID(MFeedback.class); +// +// mFeedback.CID = mCafe.ID; +// mFeedback.rate = new Double(Math.random() * 4).intValue(); +// +// mFeedback.text .put(InterfaceConstants.LANGS.RU, "Отзыв"+ System.currentTimeMillis()); +// mFeedback.text.put(InterfaceConstants.LANGS.EN, "Отзыв"+ System.currentTimeMillis()); +// mFeedback.text.put(InterfaceConstants.LANGS.UA, "Отзыв"+ System.currentTimeMillis()); +// mFeedback.text.put(InterfaceConstants.LANGS.KZ, "Отзыв"+ System.currentTimeMillis()); +// +// MongoService.save(mFeedback); +// } +// } + } +} diff --git a/kz_cafe_core/src/kz/cafe/cache/OnePassCache.java b/kz_cafe_core/src/kz/cafe/cache/OnePassCache.java new file mode 100644 index 0000000..71ad3dd --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/cache/OnePassCache.java @@ -0,0 +1,92 @@ +package kz.cafe.cache; + +import java.lang.reflect.*; +import java.util.*; +import kz.cafe.db.*; +import kz.cafe.db.model.*; + +public class OnePassCache{ + + public Map, Map>> map = new HashMap, Map>>(); + + Set setReloadHash = new HashSet(); + + + + public OnePassCache(){ + } + + + + + + + + + public Object getValue(Class classs, int ID, String sField){ + + Map> mapData = map.get(classs); + + if(mapData == null){ + reload(classs, ID, sField); + mapData = map.get(classs); + } + + + Map mapObject = mapData.get(ID); + + if(mapObject == null){ + reload(classs, ID, sField); + mapObject = mapData.get(ID); + } + + Object obj = map.get(sField); + + String sCacheHash = classs.getName() + "_" + ID + "_" + sField; + + if(obj == null && setReloadHash.contains(sCacheHash)){ + + return null; + } + else{ + reload(classs, ID, sField); + setReloadHash.add(sCacheHash); + + return mapObject.get(sField); + } + } + + + + + + private void reload(Class classs, int ID, String sField){ + + Map> mapData = map.get(classs); + + if(mapData == null){ + mapData = new HashMap>(); + map.put(classs, mapData); + } + + + for(Object obj : MongoService.ds.find(classs).retrievedFields(true, MAbstractDataElement.F_ID, sField).asList()){ + MAbstractDataElement mAbstractDataElement = (MAbstractDataElement) obj; + Map mapObject = mapData.get(mAbstractDataElement.ID); + + if(mapObject == null){ + mapObject = new HashMap(); + mapData.put(mAbstractDataElement.ID, mapObject); + } + + try{ + Field field = classs.getField(sField); + field.setAccessible(true); + mapObject.put(sField, field.get(obj)); + } + catch (Exception e){ + throw new Error("Can not cache Element", e); + } + } + } +} diff --git a/kz_cafe_core/src/kz/cafe/constants/InterfaceConstants.java b/kz_cafe_core/src/kz/cafe/constants/InterfaceConstants.java new file mode 100644 index 0000000..0e054d7 --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/constants/InterfaceConstants.java @@ -0,0 +1,8 @@ +package kz.cafe.constants; + +public class InterfaceConstants{ + + public enum LANGS{RU, EN, KZ}; + + public static final String EMPTY_IMAGE = "---.png"; +} diff --git a/kz_cafe_core/src/kz/cafe/constants/LogConstants.java b/kz_cafe_core/src/kz/cafe/constants/LogConstants.java new file mode 100644 index 0000000..020b43b --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/constants/LogConstants.java @@ -0,0 +1,22 @@ +package kz.cafe.constants; + +import java.text.*; +import java.util.*; + + +public class LogConstants{ + + public static final String LOG_NEW_REQUEST = "-------------------------------------------\n"; + + + //SimpleDateFormat is not Thread Safe!!!!!!!!!!!!!!! + public static final String DATE_FORMAT = "dd.MM.yyyy HH:mm:ss.SSS"; + + + public static String formatDate(long lDate){ + return new SimpleDateFormat(LogConstants.DATE_FORMAT).format(new Date(lDate)); + } + public static String formatDate(Date date){ + return new SimpleDateFormat(LogConstants.DATE_FORMAT).format(date); + } +} diff --git a/kz_cafe_core/src/kz/cafe/constants/OperationConstants.java b/kz_cafe_core/src/kz/cafe/constants/OperationConstants.java new file mode 100644 index 0000000..25175ca --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/constants/OperationConstants.java @@ -0,0 +1,31 @@ +package kz.cafe.constants; + +public class OperationConstants{ + public static final int SUCCESS = 0; + + //A really bad thing + //Should not happen in general + public static final int UNKNOWN_ERROR = 1; + + + public static final int DATA_WRONG_FORMAT = 2; + + + public static final int SERVER_CONFIGURATION = 3; + + + + public static final int USER_CONCURENCY = 1000; + public static final int USER_SESSION_INVALID = 1001; + public static final int USER_LOGIN_NOT_FOUND = 1002; + public static final int USER_WRONG_PASSWORD = 1003; + public static final int USER_LOGIN_IS_BUSY = 1004; + public static final int USER_LOGIN_IS_NOT_AN_EMAIL = 1005; + public static final int USER_NOT_FOUND = 1006; + + + public static final int OBJECT_NOT_FOUND = 2000; + public static final int LANGUAGE_NOT_SUPPORTED = 2001; + public static final int OBJECT_ACCESS_DENIED = 2002; + +} diff --git a/kz_cafe_core/src/kz/cafe/constants/OrderConstants.java b/kz_cafe_core/src/kz/cafe/constants/OrderConstants.java new file mode 100644 index 0000000..ac8ad3a --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/constants/OrderConstants.java @@ -0,0 +1,5 @@ +package kz.cafe.constants; + +public class OrderConstants{ + public enum STATUS{NEW, IN_PROGRESS, PAID, CANCELLED}; +} diff --git a/kz_cafe_core/src/kz/cafe/constants/ServerConstants.java b/kz_cafe_core/src/kz/cafe/constants/ServerConstants.java new file mode 100644 index 0000000..16311f8 --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/constants/ServerConstants.java @@ -0,0 +1,260 @@ +package kz.cafe.constants; + + +import java.io.*; +import java.net.*; +import java.util.*; +import kz.cafe.exceptions.*; + +public class ServerConstants{ + + private static final String SERVER_CONFIG_PATH = "server.properties"; + + private static final Properties properties; + + +// private static final String sEmailTemplate; + + static{ + properties = new Properties(); + URL url = ServerConstants.class.getResource("/" + SERVER_CONFIG_PATH); + + System.out.println("Loading the property server file at the path " + url); + + InputStream fileProperties = null; + try{ + fileProperties = ServerConstants.class.getResourceAsStream("/" + SERVER_CONFIG_PATH); + properties.load(fileProperties); + } + catch (Exception e){ + throw new RuntimeException("Can not open the properties file: " + fileProperties); + } + + + +// InputStream fileEmailTemplate = null; +// try{ +// fileEmailTemplate = ServerConstants.class.getResourceAsStream("/email.template"); +// Reader reader = new BufferedReader(new InputStreamReader(fileEmailTemplate, "UTF-8")); +// StringWriter writer = new StringWriter(); +// +// char[] buffer = new char[1024]; +// int n; +// while ((n = reader.read(buffer)) != -1){ +// writer.write(buffer, 0, n); +// } +// sEmailTemplate = writer.toString(); +// +// } +// catch (Exception e){ +// throw new RuntimeException("Can not open the email template file: " + fileEmailTemplate); +// } + + System.out.println("ok, loaded."); + } + + + + + + + + public static String getMongoURL(){ + String sMongoURL = properties.getProperty("database_ip"); + + if(sMongoURL == null){ + throw new ServiceConfigurationException( + "'database_ip' is missed in the server.properties" + ); + } + else{ + return sMongoURL; + } + } + + + + public static String getDatabase(){ + String sMongoURL = properties.getProperty("database_name"); + + if(sMongoURL == null){ + throw new ServiceConfigurationException( + "'database_name' is missed in the server.properties" + ); + } + else{ + return sMongoURL; + } + } + + + public static boolean isDebug(){ + return properties.getProperty("debug") != null; + } + + + + + + + public static String getNodeIP(){ + return properties.getProperty("ip"); + } + + + + + + public static String getEmailSmtpServer(){ + return properties.getProperty("email_smtp_host"); + } + public static String getEmailSmtpPort(){ + return properties.getProperty("email_smtp_port"); + } + public static String getEmailSmtpUser(){ + return properties.getProperty("email_smtp_user"); + } + public static String getEmailSmtpPassword(){ + return properties.getProperty("email_smtp_password"); + } + public static String getRobot(){ + return properties.getProperty("email_robot"); + } + public static String getEmailAddressSystemAdmin(){ + return properties.getProperty("email_address_feedback"); + } + + + + + + public static String getEmailConfirmationLink(){ + return properties.getProperty("email_confirmation_link"); + } + + + + + + + + + + + + + + + public static String getImageFolder() throws ServiceConfigurationException{ + String sImageFolder = properties.getProperty("image_directory"); + + if(sImageFolder == null){ + throw new ServiceConfigurationException( + "'image_directory' is missed in the server.properties" + ); + } + else{ + if(sImageFolder.endsWith("/")){ + } + else{ + sImageFolder += '/'; + } + + + return sImageFolder; + } + } + + + + + + + public static String getImageURL() throws ServiceConfigurationException{ + String sImageURL = properties.getProperty("image_url"); + + if(sImageURL == null){ + throw new ServiceConfigurationException( + "'image_url' is missed in the server.properties" + ); + } + else{ + if(sImageURL.endsWith("/")){ + } + else{ + sImageURL += '/'; + } + return sImageURL; + } + } + + + + + + public static String getAudioURL() throws ServiceConfigurationException{ + String sImageURL = properties.getProperty("audio_url"); + + if(sImageURL == null){ + throw new ServiceConfigurationException( + "'audio_url' is missed in the server.properties" + ); + } + else{ + if(sImageURL.endsWith("/")){ + } + else{ + sImageURL += '/'; + } + return sImageURL; + } + } + + + + + + + + public static int getCommercialFreeWordLimit() throws ServiceConfigurationException{ + String sFreeWordLimit = properties.getProperty("commercial_free_word_limit"); + + if(sFreeWordLimit == null || "".equals(sFreeWordLimit)){ + throw new ServiceConfigurationException( + "'commercial_free_word_limit' is missed in the server.properties" + ); + } + else{ + try{ + return Integer.parseInt(sFreeWordLimit); + } + catch (NumberFormatException e){ + throw new ServiceConfigurationException( + "'commercial_free_word_limit' must be int type" + ); + } + } + } + + + + + + + + + + + + public static String getLogPattern(){ + return properties.getProperty("internal_logger_format"); + } + + + + + + public static String getLogPaths(){ + return properties.getProperty("log_paths"); + } +} diff --git a/kz_cafe_core/src/kz/cafe/db/Constraint.java b/kz_cafe_core/src/kz/cafe/db/Constraint.java new file mode 100644 index 0000000..8716e64 --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/db/Constraint.java @@ -0,0 +1,22 @@ +package kz.cafe.db; + +import java.util.*; + +public class Constraint implements java.io.Serializable{ + private static final long serialVersionUID = 1544910410522012283L; + + public List criteria = new ArrayList(); + + + public static class Criterion implements java.io.Serializable{ + private static final long serialVersionUID = -3360640263019073026L; + + public String field; + public Object value; + + public Criterion(String field, Object value){ + this.field = field; + this.value = value; + } + } +} diff --git a/kz_cafe_core/src/kz/cafe/db/MongoService.java b/kz_cafe_core/src/kz/cafe/db/MongoService.java new file mode 100644 index 0000000..79484f7 --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/db/MongoService.java @@ -0,0 +1,263 @@ +package kz.cafe.db; + +import java.lang.reflect.*; +import java.util.*; +import java.util.concurrent.*; +import kz.cafe.constants.*; +import kz.cafe.db.model.*; +import kz.cafe.exceptions.*; +import org.apache.commons.logging.*; +import com.google.code.morphia.*; +import com.google.code.morphia.query.*; +import com.mongodb.*; + +public class MongoService{ + private static Log log = LogFactory.getLog(MongoService.class); + private static final String LOG = "[MONGO] "; + + public static final Datastore ds; + + + private static final ConcurrentHashMap, String[]> mapIndexFields = new ConcurrentHashMap, String[]>(); + + + + static{ + log.info(LOG + "Connecting to DB..."); + + try{ + Morphia morphia = new Morphia(); + morphia.mapPackage("kz.cafe.db.model"); + + Mongo db = new Mongo(ServerConstants.getMongoURL()); + ds = morphia.createDatastore(db, ServerConstants.getDatabase()); + + ds.ensureIndexes(); + + + MCounterRequests mCounterSystem = ds.find(MCounterRequests.class).get(); + if(mCounterSystem == null){ + mCounterSystem = new MCounterRequests(); + + try{ + ds.save(mCounterSystem); + } + catch(MongoException.DuplicateKey e){ + mCounterSystem = ds.find(MCounterRequests.class).get(); + } + } + + } + catch (Exception e){ + throw new Error("Can not connect to Mongo", e); + } + + + log.info(LOG + "ok."); + } + + + + public static void save(MAbstractEditableDataElement obj){ + log.trace(LOG + obj); + String[] arrstrIndexFields = getHiddenFields(obj.getClass()); + + Class class_ = obj.getClass(); + + for(String sHiddenFieldName : arrstrIndexFields){ + try{ + Field fieldValue = class_.getField(sHiddenFieldName.substring(0, sHiddenFieldName.length() - 1)); + Field fieldIndex = class_.getField(sHiddenFieldName); + + Object objValue = fieldValue.get(obj); + Object objToIndex = fieldIndex.get(obj); + + if(objValue instanceof Map){ + @SuppressWarnings("unchecked") + Map mapValue = (Map) objValue; + @SuppressWarnings("unchecked") + Map mapIndex = (Map) objToIndex; + + for(InterfaceConstants.LANGS lang : InterfaceConstants.LANGS.values()) { + mapIndex.put(lang, mapValue.get(lang).toLowerCase()); + } + } + else{ + fieldIndex.set(obj, ("" + objValue).toLowerCase()); + } + } + catch (Exception e){ + } + } + + + log.trace(LOG + "save() " + obj); + + obj.updated = System.currentTimeMillis(); + + ds.save(obj); + + log.trace(LOG + "ok"); + } + + + + + public static T get(Class clas, int ID){ + return MongoService.ds + .find(clas) + .filter(MAbstractDescriptor.F_ID, ID) + .filter(MAbstractEditableDataElement.F_DELETED, false) + .retrievedFields(false, getHiddenFields(MReservation.class)) + .get(); + } + + + + + public static T getExceptionable(Class clas, int ID) throws AbstractException{ + T t = get(clas, ID); + + if(t == null){ + throw new ObjectNotFoundException(clas, ID); + } + else { + return t; + } + } + + + + + + + public static List getList(Class classToLoad){ + return MongoService.ds + .find(classToLoad) + .filter(MAbstractEditableDataElement.F_DELETED, false) +// .order(MAbstractEditableDataElement.F_ID) + .retrievedFields(false, getHiddenFields(classToLoad)) + .asList(); + } + + + + public static List getList(Class classToLoad, Constraint constraint){ + Query query = MongoService.ds + .find(classToLoad) + .filter(MAbstractEditableDataElement.F_DELETED, false) +// .order(MAbstractEditableDataElement.F_ID) + .retrievedFields(false, getHiddenFields(classToLoad)); + + for(Constraint.Criterion criterion : constraint.criteria) { + query.filter(criterion.field, criterion.value); + } + + return query.asList(); + } + + + + + + @SuppressWarnings({ "unchecked", "rawtypes" }) + public static Object getListFrontEnd(Class classToLoad, long lTime){ + return MongoService.ds.find(classToLoad) + .filter(MAbstractEditableDataElement.F_UPDATED + " >=", lTime) + .retrievedFields(false, getHiddenFields(classToLoad)) + .asList(); + } + public static List getReserves(int UID, long lTime){ + return MongoService.ds.find(MReservation.class) + .filter(MReservation.F_UID, UID) + .filter(MAbstractEditableDataElement.F_UPDATED + " >=", lTime) + .retrievedFields(false, getHiddenFields(MReservation.class)) + .asList(); + } + + + + + + + + + + public static void undelete(Class classToUndelete, int ID){ + Query q = ds.createQuery(classToUndelete).filter(MAbstractDataElement.F_ID, ID); + UpdateOperations uOps = ds.createUpdateOperations(classToUndelete).set(MAbstractDataElement.F_DELETED, false); + ds.findAndModify(q, uOps); + } + + + + + + + + + + public static long getUniqueRequestID(){ + Query q = ds.createQuery(MCounterRequests.class); + + UpdateOperations uOps = + ds.createUpdateOperations(MCounterRequests.class).inc(MCounterRequests.NEXT); + + MCounterRequests mSystem = ds.findAndModify(q, uOps); + return mSystem.counterRequests; + } + + + + + + + + + @SuppressWarnings("rawtypes") + public static int getUniqueID(Class class_){ + Query q = + ds.createQuery(MCounterModel.class).filter(MCounterModel.CLASS, class_.getSimpleName()); + + MCounterModel mCounter = q.get(); + if(mCounter == null){ + mCounter = new MCounterModel(class_.getSimpleName()); + + try{ + ds.save(mCounter); + } + catch(MongoException.DuplicateKey e){ + } + } + + + UpdateOperations uOps = + ds.createUpdateOperations(MCounterModel.class).inc(MCounterModel.NEXT); + + MCounterModel mCounterUser = ds.findAndModify(q, uOps); + return mCounterUser.nextFreeID; + } + + + + + private static String[] getHiddenFields(Class class_){ + String[] arrstrIndexFields = mapIndexFields.get(class_); + + if(arrstrIndexFields == null){ + + Set setHiddenFields = new HashSet(); + + for(Field field : class_.getFields()){ + if(field.getName().endsWith("_")){ + setHiddenFields.add(field.getName()); + } + } + + arrstrIndexFields = setHiddenFields.toArray(new String[setHiddenFields.size()]); + mapIndexFields.put(class_, arrstrIndexFields); + } + + return arrstrIndexFields; + } +} diff --git a/kz_cafe_core/src/kz/cafe/db/logs/MongoLogService.java b/kz_cafe_core/src/kz/cafe/db/logs/MongoLogService.java new file mode 100644 index 0000000..efd36a4 --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/db/logs/MongoLogService.java @@ -0,0 +1,93 @@ +package kz.cafe.db.logs; + + +import java.util.*; +import kz.cafe.constants.*; +import kz.cafe.db.logs.model.*; +import org.apache.commons.logging.*; +import org.bson.types.*; +import com.google.code.morphia.*; +import com.mongodb.*; + +public class MongoLogService{ + private static Log log = LogFactory.getLog(MongoLogService.class); + + private static final String LOG = "[MONGO LogService] "; + + + public static final Datastore ds; + + + static{ + try{ + Morphia morphia = new Morphia(); + morphia.map(MLogHeader.class); + + + Mongo db = new Mongo(ServerConstants.getMongoURL()); + ds = morphia.createDatastore(db, "system_logs"); + + ds.ensureIndexes(); + + //ds.delete(ds.find(MLogRecord3.class)); + } + catch (Exception e){ + throw new Error("Can not connect to Mongo", e); + } + } + + + + + + + public static MLogHeader addHeader(MLogHeader mLogHeader3){ + log.trace(LOG); + + ds.save(mLogHeader3); + + return mLogHeader3; + } + + + + + + + + public static void addBody(MLogBody mLogBody3){ + log.trace(LOG); + + ds.save(mLogBody3); + } + + + + + public static List getLogHeaders(int iLimit){ + return ds.find(MLogHeader.class).order("-date").limit(iLimit).asList(); + } + + + + public static List getUserLogHeaders(long UID){ + return ds.find(MLogHeader.class, "UID", UID).order("date").asList(); + } + public static List getUserLogHeaders(String SID){ + return ds.find(MLogHeader.class, "SID", SID).order("date").asList(); + } + + + public static List getUserLogHeader(long UID, long date){ + return ds.find(MLogHeader.class, "UID", UID).filter("date", date).asList(); + } + + + + + + + public static MLogBody getUserRecord(ObjectId header){ + return ds.find(MLogBody.class, "header", header).get(); + } +} diff --git a/kz_cafe_core/src/kz/cafe/db/logs/model/MLogBody.java b/kz_cafe_core/src/kz/cafe/db/logs/model/MLogBody.java new file mode 100644 index 0000000..ab6690d --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/db/logs/model/MLogBody.java @@ -0,0 +1,15 @@ +package kz.cafe.db.logs.model; + + +import org.bson.types.*; +import com.google.code.morphia.annotations.*; + +@Entity(value = "LogRecordBody", noClassnameStored = true, concern = "Normal") +public class MLogBody{ + @Id + public ObjectId _id; + + public ObjectId header; + + public byte[] response; +} diff --git a/kz_cafe_core/src/kz/cafe/db/logs/model/MLogHeader.java b/kz_cafe_core/src/kz/cafe/db/logs/model/MLogHeader.java new file mode 100644 index 0000000..db964d3 --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/db/logs/model/MLogHeader.java @@ -0,0 +1,58 @@ +package kz.cafe.db.logs.model; + + +import org.bson.types.*; +import com.google.code.morphia.annotations.*; + + + +@Entity(value = "LogRecordHeader", noClassnameStored = true, concern = "Normal") +public class MLogHeader{ + public static final String F_DATE = "date"; + + @Id + public ObjectId _id; + + @Indexed + public long UID; + + @Indexed + public String SID; + + @Indexed + public long date; + + public long performance; + + public String IP; + + public String name; + + public String request_url; + + public String request_post; + + + + + + + @Override + public String toString(){ + StringBuilder builder = new StringBuilder(); + builder.append("MLogRecord3 [UID="); + builder.append(UID); + builder.append(", date="); + builder.append(date); + builder.append(", performance="); + builder.append(performance); + builder.append(", IP="); + builder.append(IP); + builder.append(", name="); + builder.append(name); + builder.append(", request="); + builder.append(request_url); + builder.append("]"); + return builder.toString(); + } +} diff --git a/kz_cafe_core/src/kz/cafe/db/model/MAbstractDataElement.java b/kz_cafe_core/src/kz/cafe/db/model/MAbstractDataElement.java new file mode 100644 index 0000000..26f8e94 --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/db/model/MAbstractDataElement.java @@ -0,0 +1,57 @@ +package kz.cafe.db.model; + +import kz.cafe.constants.*; +import kz.cafe.db.model.anotations.*; +import org.bson.types.*; +import com.google.code.morphia.annotations.*; + +public abstract class MAbstractDataElement implements java.io.Serializable{ + private static final long serialVersionUID = -8481060095754163216L; + + @AnnotationNotExported + public static final String F_ID = "ID"; + @AnnotationNotExported + public static final String F_DELETED = "deleted"; + + + @AnnotationNotExported + public static final String F_OWNER_ID = "ownerID"; + @AnnotationNotExported + public static final String F_OWNER_LOGIN = "ownerLogin"; + + + @AnnotationNotExported + public static final String F_CREATED = "created"; + + + + @Id + @AnnotationNotExported + public ObjectId _id; // auto-generated, if not set (see ObjectId) + + @Version + @AnnotationNotExported + public long _version; + + + @Indexed(unique=true) + public int ID; + + + @AnnotationRelated(foreign = MUser.class) + @Indexed + public int ownerID = 0; + + + @AnnotationDate + public long created = System.currentTimeMillis(); + + @AnnotationNotExported + @Indexed() + public boolean deleted = false; + + + public String humanReadable(InterfaceConstants.LANGS lang){ + return this.getClass()+ " [" + ID + "]"; + } +} diff --git a/kz_cafe_core/src/kz/cafe/db/model/MAbstractDescriptor.java b/kz_cafe_core/src/kz/cafe/db/model/MAbstractDescriptor.java new file mode 100644 index 0000000..1e776a4 --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/db/model/MAbstractDescriptor.java @@ -0,0 +1,54 @@ +package kz.cafe.db.model; + +import java.util.*; +import kz.cafe.constants.*; +import kz.cafe.constants.InterfaceConstants.LANGS; +import kz.cafe.db.model.anotations.*; + +public abstract class MAbstractDescriptor extends MAbstractEditableDataElement{ + private static final long serialVersionUID = -4728140722225400112L; + + + @AnnotationNotExported + public static final String F_IMAGE = "image"; + + + @AnnotationMultiLangString + @AnnotationNoExportIndex + public Map name = new HashMap(); + + @AnnotationMultiLangString + @AnnotationNotExported + public Map name_ = new HashMap(); + + + @AnnotationMultiLangString + @AnnotationNoExportIndex + public Map description = new HashMap(); + + @AnnotationMultiLangString + @AnnotationNotExported + public Map description_ = new HashMap(); + + + @AnnotationImage + public String image = InterfaceConstants.EMPTY_IMAGE; + + + public int order; + + + @Override + public String humanReadable(InterfaceConstants.LANGS lang){ +// return name.get(lang) + " [" + ID + "]"; + return name.get(lang); + } + + + @Override + public String toString(){ + return super.toString() + ", name=" + name + ", name_=" + name_ + ", description=" + + description + ", description_=" + description_ + ", image=" + image + ", order=" + + order; + } +} diff --git a/kz_cafe_core/src/kz/cafe/db/model/MAbstractEditableDataElement.java b/kz_cafe_core/src/kz/cafe/db/model/MAbstractEditableDataElement.java new file mode 100644 index 0000000..6457e23 --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/db/model/MAbstractEditableDataElement.java @@ -0,0 +1,35 @@ +package kz.cafe.db.model; + +import kz.cafe.db.model.anotations.*; +import com.google.code.morphia.annotations.*; + +public abstract class MAbstractEditableDataElement extends MAbstractDataElement{ + private static final long serialVersionUID = 2339927771241139334L; + + + @AnnotationNotExported + public static final String F_PUBLISHED = "published"; + @AnnotationNotExported + public static final String F_UPDATED = "updated"; + + + @AnnotationDate + @Indexed() + public long updated = System.currentTimeMillis(); + + + @AnnotationNotExported + @Indexed() + public boolean published = false; + + @Override + public String toString(){ + StringBuilder builder = new StringBuilder(); + builder.append(this.getClass().getName()) + .append(", ID=").append(super.ID); + return builder.toString(); + } + + + +} diff --git a/kz_cafe_core/src/kz/cafe/db/model/MAbstractMessage.java b/kz_cafe_core/src/kz/cafe/db/model/MAbstractMessage.java new file mode 100644 index 0000000..027586c --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/db/model/MAbstractMessage.java @@ -0,0 +1,36 @@ +package kz.cafe.db.model; + +import java.util.*; +import kz.cafe.constants.*; +import kz.cafe.constants.InterfaceConstants.LANGS; +import kz.cafe.db.model.anotations.*; + +public class MAbstractMessage extends MAbstractEditableDataElement{ + private static final long serialVersionUID = -691692894114478393L; + + + @AnnotationRelated(foreign = MUser.class) + + public int fromUID; + + @AnnotationMultiLangString + @AnnotationNoExportIndex + public Map header = new HashMap(); + + @AnnotationMultiLangString + @AnnotationNoExportIndex + public Map header_ = new HashMap(); + + + + @AnnotationMultiLangString + @AnnotationNoExportIndex + public Map text = new HashMap(); + + @AnnotationMultiLangString + @AnnotationNoExportIndex + public Map text_ = new HashMap(); + + + public boolean read; +} diff --git a/kz_cafe_core/src/kz/cafe/db/model/MAbstractStatistics.java b/kz_cafe_core/src/kz/cafe/db/model/MAbstractStatistics.java new file mode 100644 index 0000000..dc65d73 --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/db/model/MAbstractStatistics.java @@ -0,0 +1,35 @@ +package kz.cafe.db.model; + + +public abstract class MAbstractStatistics extends MAbstractDataElement{ + private static final long serialVersionUID = -8574964745780719479L; + + + public final static String F_TOTAL = "counterTotal"; + public final static String F_USER_NEW = "counterNewUsers"; + public final static String F_LOGINS = "counterLogins"; + public final static String F_LOGIN_SUCCESS = "counterLoginSuccess"; + public final static String F_ORDER_NEW = "counterNewOrders"; + public final static String F_FEEDBACK_NEW = "counterNewFeedbacks"; + + + public final static String F_MENU = "countMenu"; + public final static String F_FEEDBACKS = "countFeedback"; + public final static String F_SALES = "countSales"; + public final static String F_NEWS = "countNews"; + + + + public long counterTotal; + public long counterNewUsers; + public long counterLogins; + public long counterLoginSuccess; + public long counterNewOrders; + public long counterNewFeedbacks; + + + public long countMenu; + public long countFeedback; + public long countSales; + public long countNews; +} diff --git a/kz_cafe_core/src/kz/cafe/db/model/MCafe.java b/kz_cafe_core/src/kz/cafe/db/model/MCafe.java new file mode 100644 index 0000000..eb4c694 --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/db/model/MCafe.java @@ -0,0 +1,160 @@ +package kz.cafe.db.model; + +import java.util.*; +import kz.cafe.constants.*; +import kz.cafe.constants.InterfaceConstants.*; +import kz.cafe.db.model.anotations.*; +import com.google.code.morphia.annotations.*; + +@Entity(value="Cafe", noClassnameStored=true, concern = "SAFE") +@Indexes({@Index(unique = false, value = "name_.RU"), + @Index(unique = false, value = "name_.EN"), + @Index(unique = false, value = "name_.KZ"), + @Index(unique = false, value = "address_.RU"), + @Index(unique = false, value = "address_.EN"), + @Index(unique = false, value = "address_.KZ")}) +public class MCafe extends MAbstractDescriptor{ + private static final long serialVersionUID = 2474321033067760008L; + + + @AnnotationNotExported + public static final String F_RATE = "rate"; + + + @AnnotationRelated(foreign = MCafeType.class) + @Indexed() + public Integer type; + + + + @AnnotationIncusiveList(foreign = MCafeType.class) + public Set types = new HashSet(); + + + + @AnnotationRelated(foreign = MCity.class) + @Indexed() + public Integer city; + + + + public Integer rate = 0; + + public Integer price = 0; + + + @AnnotationTime + public int timeOpen = 600; + @AnnotationTime + public int timeClose = 1380; + + + + @AnnotationTime + public int timeOpenWeekend = 600; + @AnnotationTime + public int timeCloseWeekend = 1380; + + + @AnnotationTime + public int timeOpenMo = timeOpen; + @AnnotationTime + public int timeCloseMo = timeClose; + @AnnotationTime + public int timeOpenTu = timeOpen; + @AnnotationTime + public int timeCloseTu = timeClose; + @AnnotationTime + public int timeOpenWe = timeOpen; + @AnnotationTime + public int timeCloseWe = timeClose; + @AnnotationTime + public int timeOpenTh = timeOpen; + @AnnotationTime + public int timeCloseTh = timeClose; + @AnnotationTime + public int timeOpenFr = timeOpen; + @AnnotationTime + public int timeCloseFr = timeClose; + @AnnotationTime + public int timeOpenSa = timeOpenWeekend; + @AnnotationTime + public int timeCloseSa = timeCloseWeekend; + @AnnotationTime + public int timeOpenSu = timeOpenWeekend; + @AnnotationTime + public int timeCloseSu = timeCloseWeekend; + + + + + @Indexed() + public String phone = ""; + + + + @AnnotationMultiLangString + @AnnotationNoExportIndex + public Map address = new HashMap(); + + @AnnotationMultiLangString + @AnnotationNotExported + public Map address_ = new HashMap(); + + + + @AnnotationNotExported + public double longitude; + @AnnotationNotExported + public double latitude; + + + @AnnotationIncusiveList(foreign = MServiceType.class) + public Set service = new HashSet(); + + + @AnnotationIncusiveList(foreign = MFaceControl.class) + public Set faceControl = new HashSet(); + + + @AnnotationIncusiveList(foreign = MCuisine.class) + public Set cuisines = new HashSet(); + + + + public String coordinates = ""; + + + public boolean hasDelivery; + public boolean hasReservation; + + + public Integer bill_average_min; + public Integer bill_average_max; + + public Integer tableTotal; + public Integer tableFree; + + + @AnnotationTime + public Integer timeOrdersFrom = null; + @AnnotationTime + public Integer timeOrdersTo = null; + @AnnotationTime + public Integer timeReservationFrom = null; + @AnnotationTime + public Integer timeReservationTo = null; + + + + public MCafe(){ + super(); + } + + + + @Override + public String toString(){ + return "MCafe [CID=" + ID + ", mapName=" + name + "]"; + } +} diff --git a/kz_cafe_core/src/kz/cafe/db/model/MCafeImage.java b/kz_cafe_core/src/kz/cafe/db/model/MCafeImage.java new file mode 100644 index 0000000..ef5282f --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/db/model/MCafeImage.java @@ -0,0 +1,14 @@ +package kz.cafe.db.model; + +import kz.cafe.db.model.anotations.*; +import com.google.code.morphia.annotations.*; + +@Entity(value="CafeImage", noClassnameStored=true, concern = "SAFE") +public class MCafeImage extends MAbstractDescriptor{ + private static final long serialVersionUID = -4357543923205935482L; + + + @Indexed() + @AnnotationRelated(foreign = MCafe.class) + public int CID; +} diff --git a/kz_cafe_core/src/kz/cafe/db/model/MCafeType.java b/kz_cafe_core/src/kz/cafe/db/model/MCafeType.java new file mode 100644 index 0000000..366873f --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/db/model/MCafeType.java @@ -0,0 +1,12 @@ +package kz.cafe.db.model; + +import com.google.code.morphia.annotations.*; + + +@Entity(value="CafeCategory", noClassnameStored=true, concern = "SAFE") +@Indexes({@Index(unique = true, value = "name_.RU"), + @Index(unique = true, value = "name_.EN"), + @Index(unique = true, value = "name_.KZ")}) +public class MCafeType extends MAbstractDescriptor{ + private static final long serialVersionUID = 1183289026756733874L; +} diff --git a/kz_cafe_core/src/kz/cafe/db/model/MCity.java b/kz_cafe_core/src/kz/cafe/db/model/MCity.java new file mode 100644 index 0000000..80e693f --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/db/model/MCity.java @@ -0,0 +1,17 @@ +package kz.cafe.db.model; + +import com.google.code.morphia.annotations.*; + + + +@Entity(value = "City", noClassnameStored = true, concern = "SAFE") +@Indexes({@Index(unique = true, value = "name_.RU"), + @Index(unique = true, value = "name_.EN"), + @Index(unique = true, value = "name_.KZ")}) +public class MCity extends MAbstractDescriptor{ + private static final long serialVersionUID = 9057437958479241637L; + + + public int GMT = 0; + public boolean hasCafe = false; +} diff --git a/kz_cafe_core/src/kz/cafe/db/model/MConfirmationCode.java b/kz_cafe_core/src/kz/cafe/db/model/MConfirmationCode.java new file mode 100644 index 0000000..437d7f9 --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/db/model/MConfirmationCode.java @@ -0,0 +1,19 @@ +package kz.cafe.db.model; + +import com.google.code.morphia.annotations.*; + + + +@Entity(value="ConfirmationCode", noClassnameStored=true, concern = "SAFE") +public class MConfirmationCode{ + + public static final String F_CODE = "code"; + + @Id + @Indexed(unique=true) + public String code; + + public int UID; +} + + diff --git a/kz_cafe_core/src/kz/cafe/db/model/MCounterModel.java b/kz_cafe_core/src/kz/cafe/db/model/MCounterModel.java new file mode 100644 index 0000000..a19ec3d --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/db/model/MCounterModel.java @@ -0,0 +1,34 @@ +package kz.cafe.db.model; + +import org.bson.types.*; +import com.google.code.morphia.annotations.*; + + + +@Entity(value = "CounterModel", noClassnameStored = true) +public class MCounterModel{ + + public static final String NEXT = "nextFreeID"; + public static final String CLASS = "clas"; + + @Id + public ObjectId _id; // auto-generated, if not set (see ObjectId) + + @Version + public long _version; + + @Indexed(unique = true) + public String clas; + + + public int nextFreeID = 0; + + + public MCounterModel(){ + } + + + public MCounterModel(String clas){ + this.clas = clas; + } +} diff --git a/kz_cafe_core/src/kz/cafe/db/model/MCounterRequests.java b/kz_cafe_core/src/kz/cafe/db/model/MCounterRequests.java new file mode 100644 index 0000000..c37aae5 --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/db/model/MCounterRequests.java @@ -0,0 +1,26 @@ +package kz.cafe.db.model; + +import org.bson.types.*; +import com.google.code.morphia.annotations.*; + + + +@Entity(value = "CounterSystem", noClassnameStored = true) +public class MCounterRequests{ + + public static final String NEXT = "counterRequests"; + + + @Id + public ObjectId _id; // auto-generated, if not set (see ObjectId) + + @Version + public long _version; + + @Indexed(unique = true) + public long lock = 0; + + + + public long counterRequests = 0L; +} diff --git a/kz_cafe_core/src/kz/cafe/db/model/MCourse.java b/kz_cafe_core/src/kz/cafe/db/model/MCourse.java new file mode 100644 index 0000000..3aa221f --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/db/model/MCourse.java @@ -0,0 +1,43 @@ +package kz.cafe.db.model; + +import java.util.*; +import kz.cafe.constants.*; +import kz.cafe.constants.InterfaceConstants.*; +import kz.cafe.db.model.anotations.*; +import com.google.code.morphia.annotations.*; + + +@Entity(value="Course", noClassnameStored=true, concern = "SAFE") +public class MCourse extends MAbstractDescriptor{ + private static final long serialVersionUID = -8391714219733994699L; + + public static final String F_CID = "CID"; + + + @AnnotationRelated(foreign = MCourseCategory.class) + public int category; + + + @AnnotationRelated(foreign = MCafe.class) + public int CID; + + + + @AnnotationPrice + public int price; + + + @AnnotationMultiLangString + @AnnotationNoExportIndex + public Map weight2 = new HashMap(); + + @AnnotationMultiLangString + @AnnotationNotExported + public Map weight2_ = new HashMap(); + + + @AnnotationIncusiveList(foreign = MIngredient.class) + public Set ingredient = new HashSet(); + + public boolean delivery = false; +} diff --git a/kz_cafe_core/src/kz/cafe/db/model/MCourseCategory.java b/kz_cafe_core/src/kz/cafe/db/model/MCourseCategory.java new file mode 100644 index 0000000..877f95a --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/db/model/MCourseCategory.java @@ -0,0 +1,12 @@ +package kz.cafe.db.model; + +import com.google.code.morphia.annotations.*; + + +@Entity(value="CourseCategory", noClassnameStored=true, concern = "SAFE") +@Indexes({@Index(unique = true, value = "name_.RU"), + @Index(unique = true, value = "name_.EN"), + @Index(unique = true, value = "name_.KZ")}) +public class MCourseCategory extends MAbstractDescriptor{ + private static final long serialVersionUID = -1610324320303470089L; +} diff --git a/kz_cafe_core/src/kz/cafe/db/model/MCuisine.java b/kz_cafe_core/src/kz/cafe/db/model/MCuisine.java new file mode 100644 index 0000000..382604d --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/db/model/MCuisine.java @@ -0,0 +1,12 @@ +package kz.cafe.db.model; + +import com.google.code.morphia.annotations.*; + + +@Entity(value="Cuisine", noClassnameStored=true, concern = "SAFE") +@Indexes({@Index(unique = true, value = "name_.RU"), + @Index(unique = true, value = "name_.EN"), + @Index(unique = true, value = "name_.KZ")}) +public class MCuisine extends MAbstractDescriptor{ + private static final long serialVersionUID = 273410042973381746L; +} diff --git a/kz_cafe_core/src/kz/cafe/db/model/MFaceControl.java b/kz_cafe_core/src/kz/cafe/db/model/MFaceControl.java new file mode 100644 index 0000000..994d31a --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/db/model/MFaceControl.java @@ -0,0 +1,13 @@ +package kz.cafe.db.model; + +import com.google.code.morphia.annotations.*; + + +@Entity(value="FaceControl", noClassnameStored=true, concern = "SAFE") +@Indexes({@Index(unique = true, value = "name_.RU"), + @Index(unique = true, value = "name_.EN"), + @Index(unique = true, value = "name_.KZ")}) +public class MFaceControl extends MAbstractDescriptor{ + + private static final long serialVersionUID = 2087714329245939590L; +} diff --git a/kz_cafe_core/src/kz/cafe/db/model/MFeedback.java b/kz_cafe_core/src/kz/cafe/db/model/MFeedback.java new file mode 100644 index 0000000..cf6b922 --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/db/model/MFeedback.java @@ -0,0 +1,57 @@ +package kz.cafe.db.model; + +import java.util.*; +import kz.cafe.constants.*; +import kz.cafe.constants.InterfaceConstants.LANGS; +import kz.cafe.db.model.anotations.*; +import com.google.code.morphia.annotations.*; + + +@Entity(value="Feedback", noClassnameStored=true, concern = "SAFE") +@Indexes({@Index(unique = false, value = "CID, rate"), + @Index(unique = false, value = "text_.RU"), + @Index(unique = false, value = "text_.EN"), + @Index(unique = false, value = "text_.KZ")}) +public class MFeedback extends MAbstractEditableDataElement{ + private static final long serialVersionUID = 8699383153836817922L; + + @AnnotationNotExported + public static final String F_CID = "CID"; + + @AnnotationNotExported + public static final String F_RATE = "rate"; + + + @Indexed() + @AnnotationRelated(foreign = MCafe.class) + public int CID; + + public int rate; + + + @Indexed() + @AnnotationRelated(foreign = MUser.class) + @AnnotationExport(foreign = MUser.class, column = "login, name", local_prefix="author_") + public int UID; + + + + @AnnotationMultiLangString + @AnnotationNoExportIndex + public Map title = new HashMap(); + + @AnnotationMultiLangString + @AnnotationNotExported + public Map title_ = new HashMap(); + + + + + @AnnotationMultiLangString + @AnnotationNoExportIndex + public Map text = new HashMap(); + + @AnnotationMultiLangString + @AnnotationNotExported + public Map text_ = new HashMap(); +} diff --git a/kz_cafe_core/src/kz/cafe/db/model/MI18NClient.java b/kz_cafe_core/src/kz/cafe/db/model/MI18NClient.java new file mode 100644 index 0000000..5cf1aa4 --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/db/model/MI18NClient.java @@ -0,0 +1,26 @@ +package kz.cafe.db.model; + +import java.util.*; +import kz.cafe.constants.*; +import kz.cafe.constants.InterfaceConstants.*; +import kz.cafe.db.model.anotations.*; +import com.google.code.morphia.annotations.*; + + + +@Entity(value="I18NClient", noClassnameStored=true, concern = "SAFE") +public class MI18NClient extends MAbstractDescriptor{ + private static final long serialVersionUID = 2876919699829619216L; + + + @AnnotationMultiLangString + @AnnotationNoExportIndex + public Map text = new HashMap(); + + @AnnotationMultiLangString + @AnnotationNotExported + public Map text_ = new HashMap(); + +} + + diff --git a/kz_cafe_core/src/kz/cafe/db/model/MImage.java b/kz_cafe_core/src/kz/cafe/db/model/MImage.java new file mode 100644 index 0000000..12c10c4 --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/db/model/MImage.java @@ -0,0 +1,12 @@ +package kz.cafe.db.model; + +import com.google.code.morphia.annotations.*; + + + +@Entity(value="Image", noClassnameStored=true, concern = "SAFE") +public class MImage extends MAbstractDescriptor{ + private static final long serialVersionUID = -7083312939329055648L; +} + + diff --git a/kz_cafe_core/src/kz/cafe/db/model/MIngredient.java b/kz_cafe_core/src/kz/cafe/db/model/MIngredient.java new file mode 100644 index 0000000..e852838 --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/db/model/MIngredient.java @@ -0,0 +1,12 @@ +package kz.cafe.db.model; + +import com.google.code.morphia.annotations.*; + + +@Entity(value="Ingredient", noClassnameStored=true, concern = "SAFE") +@Indexes({@Index(unique = true, value = "name_.RU"), + @Index(unique = true, value = "name_.EN"), + @Index(unique = true, value = "name_.KZ")}) +public class MIngredient extends MAbstractDescriptor{ + private static final long serialVersionUID = -8441853056160968856L; +} diff --git a/kz_cafe_core/src/kz/cafe/db/model/MLog.java b/kz_cafe_core/src/kz/cafe/db/model/MLog.java new file mode 100644 index 0000000..bef15fd --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/db/model/MLog.java @@ -0,0 +1,29 @@ +package kz.cafe.db.model; + +import kz.cafe.db.model.anotations.*; +import com.google.code.morphia.annotations.*; + + + +@Entity(value = "Log", noClassnameStored = true, concern = "SAFE") +public class MLog extends MAbstractDataElement{ + private static final long serialVersionUID = 8712694017775716408L; + + public String screen; + + public String relatedClass; + public int OID; + public String object; + public String name; + + @AnnotationRelated(foreign = MUser.class) + public int UID; + + @AnnotationRelated(foreign = MUser.class) + public String login; + + public String language; + + public String old_value; + public String new_value; +} diff --git a/kz_cafe_core/src/kz/cafe/db/model/MMessageCafe.java b/kz_cafe_core/src/kz/cafe/db/model/MMessageCafe.java new file mode 100644 index 0000000..d4abfaf --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/db/model/MMessageCafe.java @@ -0,0 +1,14 @@ +package kz.cafe.db.model; + +import kz.cafe.db.model.anotations.*; +import com.google.code.morphia.annotations.*; + +public class MMessageCafe extends MAbstractMessage{ + private static final long serialVersionUID = -7951738280707723248L; + + + @Indexed() + @AnnotationRelated(foreign = MCafe.class) + public int toCID; + +} diff --git a/kz_cafe_core/src/kz/cafe/db/model/MMessageSystem.java b/kz_cafe_core/src/kz/cafe/db/model/MMessageSystem.java new file mode 100644 index 0000000..4dfa6c4 --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/db/model/MMessageSystem.java @@ -0,0 +1,6 @@ +package kz.cafe.db.model; + + +public class MMessageSystem extends MAbstractMessage{ + private static final long serialVersionUID = 7546703974520026046L; +} diff --git a/kz_cafe_core/src/kz/cafe/db/model/MNews.java b/kz_cafe_core/src/kz/cafe/db/model/MNews.java new file mode 100644 index 0000000..f4d6f8a --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/db/model/MNews.java @@ -0,0 +1,25 @@ +package kz.cafe.db.model; + +import kz.cafe.db.model.anotations.*; +import com.google.code.morphia.annotations.*; + + + +@Entity(value="News", noClassnameStored=true, concern = "SAFE") +public class MNews extends MAbstractDescriptor{ + private static final long serialVersionUID = 5125916793289685777L; + + + @AnnotationRelated(foreign = MCafe.class) + public Integer CID; + + + @AnnotationDate + public long date_notification = System.currentTimeMillis(); + + + public boolean showMainScreen; + public boolean showNews; +} + + diff --git a/kz_cafe_core/src/kz/cafe/db/model/MOrder.java b/kz_cafe_core/src/kz/cafe/db/model/MOrder.java new file mode 100644 index 0000000..42304ba --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/db/model/MOrder.java @@ -0,0 +1,71 @@ +package kz.cafe.db.model; + +import java.text.*; +import java.util.*; +import kz.cafe.constants.*; +import kz.cafe.constants.InterfaceConstants.*; +import kz.cafe.db.model.anotations.*; +import com.google.code.morphia.annotations.*; + + + +@Entity(value="Order", noClassnameStored=true, concern = "SAFE") +public class MOrder extends MAbstractEditableDataElement{ + private static final long serialVersionUID = 1284785145792132969L; + + + @AnnotationNotExported + public static final String F_UID = "UID"; + @AnnotationNotExported + public static final String F_STATUS = "status"; + @AnnotationNotExported + public static final String F_PRICE = "price"; + + + + + @AnnotationRelated(foreign = MCafe.class) + public int CID; + + @AnnotationRelated(foreign = MUser.class) + public int UID; + + @AnnotationRelated(foreign = MSale.class) + public Integer AID; + + + @AnnotationMultiLangString + public Map comment = new HashMap(); + + +// public int price_draft; +// public int price_final; + + + public int status = 0; + + + public boolean confirmed; + + public boolean closed; + + @AnnotationPrice + public int price; + + @AnnotationRelated(foreign = MCity.class) + public Integer deliveryCity; + + public String deliveryStreet; + public String deliveryBuilding; + public String deliveryApartment; + public String deliveryPhone; + + + public String humanReadable(InterfaceConstants.LANGS lang){ + SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-YYYY HH:mm"); + return "Заказ N " + ID + " от " + sdf.format(new Date(super.created)); + } +} + + + diff --git a/kz_cafe_core/src/kz/cafe/db/model/MOrderItem.java b/kz_cafe_core/src/kz/cafe/db/model/MOrderItem.java new file mode 100644 index 0000000..4df3cc2 --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/db/model/MOrderItem.java @@ -0,0 +1,36 @@ +package kz.cafe.db.model; + +import kz.cafe.constants.*; +import kz.cafe.db.model.anotations.*; +import com.google.code.morphia.annotations.*; + + + +@Entity(value="OrderItem", noClassnameStored=true, concern = "SAFE") +public class MOrderItem extends MAbstractEditableDataElement{ + private static final long serialVersionUID = 827759302170084517L; + + + public static final String F_OID = "OID"; + public static final String F_MID = "MID"; + + @AnnotationRelated(foreign = MOrder.class) + public int OID; + + @AnnotationRelated(foreign = MCourse.class) + public int MID; + public int quantity; + + @AnnotationPrice + public int price; + + + + + public String humanReadable(InterfaceConstants.LANGS lang){ + return "Часть Заказа N " + ID; + } +} + + + diff --git a/kz_cafe_core/src/kz/cafe/db/model/MPhone.java b/kz_cafe_core/src/kz/cafe/db/model/MPhone.java new file mode 100644 index 0000000..2c4e95a --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/db/model/MPhone.java @@ -0,0 +1,20 @@ +package kz.cafe.db.model; + +import kz.cafe.db.model.anotations.*; +import com.google.code.morphia.annotations.*; + + + +@Entity(value="Phone", noClassnameStored=true, concern = "SAFE") +public class MPhone extends MAbstractDescriptor{ + private static final long serialVersionUID = 6085818453079263650L; + + + + @AnnotationRelated(foreign = MCity.class) + public Integer city; + + public String phone = ""; +} + + diff --git a/kz_cafe_core/src/kz/cafe/db/model/MReservation.java b/kz_cafe_core/src/kz/cafe/db/model/MReservation.java new file mode 100644 index 0000000..cd2feac --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/db/model/MReservation.java @@ -0,0 +1,41 @@ +package kz.cafe.db.model; + +import java.util.*; +import com.google.code.morphia.annotations.*; +import kz.cafe.constants.*; +import kz.cafe.constants.InterfaceConstants.*; +import kz.cafe.db.model.anotations.*; + +@Entity(value="Reservation", noClassnameStored=true, concern = "SAFE") +public class MReservation extends MAbstractEditableDataElement{ + private static final long serialVersionUID = 8054227032088193816L; + + + public static final String F_UID = "UID"; + public static final String F_CONFIRMED = "confirmed"; + + @AnnotationRelated(foreign = MCafe.class) + public int CID; + + @AnnotationRelated(foreign = MUser.class) + @Indexed + public int UID; + + @AnnotationDate + @Indexed + public long date = System.currentTimeMillis(); + + public int sits; + + @AnnotationMultiLangString + public Map comment = new HashMap(); + + public boolean confirmed; + + + @Override + public String humanReadable(InterfaceConstants.LANGS lang){ +// return name.get(lang) + " [" + ID + "]"; + return "Резерв номер " + ID; + } +} diff --git a/kz_cafe_core/src/kz/cafe/db/model/MRole.java b/kz_cafe_core/src/kz/cafe/db/model/MRole.java new file mode 100644 index 0000000..622fbb9 --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/db/model/MRole.java @@ -0,0 +1,25 @@ +package kz.cafe.db.model; + +import java.util.*; +import kz.cafe.db.model.anotations.*; +import com.google.code.morphia.annotations.*; + + +@Entity(value="Role", noClassnameStored=true, concern = "SAFE") +public class MRole extends MAbstractDescriptor{ + private static final long serialVersionUID = 3700326687803491105L; + + + + @AnnotationIncusiveListManual + public Set screenRead = new HashSet(); + + @AnnotationIncusiveListManual + public Set screenAdd = new HashSet(); + + @AnnotationIncusiveListManual + public Set screenEdit = new HashSet(); + + @AnnotationIncusiveListManual + public Set screenDelete = new HashSet(); +} diff --git a/kz_cafe_core/src/kz/cafe/db/model/MSale.java b/kz_cafe_core/src/kz/cafe/db/model/MSale.java new file mode 100644 index 0000000..cae9c0f --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/db/model/MSale.java @@ -0,0 +1,31 @@ +package kz.cafe.db.model; + +import kz.cafe.db.model.anotations.*; +import com.google.code.morphia.annotations.*; + + + +@Entity(value="Sales", noClassnameStored=true, concern = "SAFE") +public class MSale extends MAbstractDescriptor{ + private static final long serialVersionUID = -3115405704187835877L; + + + + @AnnotationRelated(foreign = MCafe.class) + public Integer CID; + + @AnnotationDate + public long date_from = System.currentTimeMillis(); + + @AnnotationDate + public long date_to = System.currentTimeMillis(); + + @AnnotationDate + public long date_notification = System.currentTimeMillis(); + + + public boolean showMainScreen; + public boolean showNews; +} + + diff --git a/kz_cafe_core/src/kz/cafe/db/model/MServiceType.java b/kz_cafe_core/src/kz/cafe/db/model/MServiceType.java new file mode 100644 index 0000000..1626bd8 --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/db/model/MServiceType.java @@ -0,0 +1,13 @@ +package kz.cafe.db.model; + +import com.google.code.morphia.annotations.*; + + +@Entity(value="ServiceType", noClassnameStored=true, concern = "SAFE") +@Indexes({@Index(unique = true, value = "name_.RU"), + @Index(unique = true, value = "name_.EN"), + @Index(unique = true, value = "name_.KZ")}) +public class MServiceType extends MAbstractDescriptor{ + + private static final long serialVersionUID = -8747152062724162605L; +} diff --git a/kz_cafe_core/src/kz/cafe/db/model/MStatisticDate.java b/kz_cafe_core/src/kz/cafe/db/model/MStatisticDate.java new file mode 100644 index 0000000..29f9be3 --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/db/model/MStatisticDate.java @@ -0,0 +1,17 @@ +package kz.cafe.db.model; + +import kz.cafe.db.model.anotations.*; +import com.google.code.morphia.annotations.*; + +@Entity(value = "StatDate", noClassnameStored = true, concern = "SAFE") +public class MStatisticDate extends MAbstractStatistics{ + private static final long serialVersionUID = -7934402269541240809L; + + + + public static final String F_DATE = "date"; + + @Indexed(unique=true) + @AnnotationDate + public long date; +} diff --git a/kz_cafe_core/src/kz/cafe/db/model/MStatisticIP.java b/kz_cafe_core/src/kz/cafe/db/model/MStatisticIP.java new file mode 100644 index 0000000..ff967a1 --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/db/model/MStatisticIP.java @@ -0,0 +1,15 @@ +package kz.cafe.db.model; + +import com.google.code.morphia.annotations.*; + +@Entity(value = "StatIP", noClassnameStored = true, concern = "SAFE") +public class MStatisticIP extends MAbstractStatistics{ + private static final long serialVersionUID = 6512218608506910507L; + + + public static final String F_IP = "IP"; + + + @Indexed(unique=true) + public String IP; +} diff --git a/kz_cafe_core/src/kz/cafe/db/model/MUser.java b/kz_cafe_core/src/kz/cafe/db/model/MUser.java new file mode 100644 index 0000000..9b6ec58 --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/db/model/MUser.java @@ -0,0 +1,165 @@ +package kz.cafe.db.model; + +import java.util.*; +import kz.cafe.constants.*; +import kz.cafe.db.model.anotations.*; +import com.google.code.morphia.annotations.*; + + + +@Entity(value="UserProfile", noClassnameStored=true, concern = "SAFE") +public class MUser extends MAbstractEditableDataElement{ + private static final long serialVersionUID = -1043450645053950858L; + + + @AnnotationNotExported + public static final String F_UID = "ID"; + @AnnotationNotExported + public static final String F_LOGIN = "login"; + @AnnotationNotExported + public static final String F_PASSWORD = "password"; + + + + public static final String F_CAN_USE_GUI = "canUseGUI"; + + + @AnnotationNotExported + public static final String F_COUNTER_ORDERS_TOTAL = "cntrOrdersTotal"; + @AnnotationNotExported + public static final String F_COUNTER_ORDERS_PAID = "cntrOrdersPaid"; + + + @AnnotationNotExported + public static final String F_EMAIL_CONFIRMED = "emailConfirmed"; + + + + + + @Indexed(unique = true) + public String login = "user_" + System.currentTimeMillis() / 1000; + public String password = ""; + + public boolean emailConfirmed = false; + + + @AnnotationRelated(foreign = MRole.class) + public Integer role; + + + public boolean active = true; + public boolean canUseGUI = false; + + public InterfaceConstants.LANGS lang; + + public String name = ""; + public String phone = ""; + + @AnnotationRelated(foreign = MCity.class) + public Integer city; + + public boolean gender; + + public long birthdate; + + + public Device device; + public List devices = new ArrayList(); + + + public long dateRegistration = System.currentTimeMillis(); + public long dateLatestLogin; + + + @AnnotationImage + public String image = InterfaceConstants.EMPTY_IMAGE; + + + + public int cntrOrdersTotal; + public int cntrOrdersPaid; + + + public boolean hasEmailNotifications = false; + + + public static class Device{ + public String name; + public String os; + + + + public Device(){ + } + + + + + public Device(String name, String os){ + this.name = name; + this.os = os; + } + + + + + + @Override + public int hashCode(){ + final int prime = 31; + int result = 1; + result = prime * result + ((name == null) ? 0 : name.hashCode()); + result = prime * result + ((os == null) ? 0 : os.hashCode()); + return result; + } + + + + + + @Override + public boolean equals(Object obj){ + if(this == obj) + return true; + if(obj == null) + return false; + if(getClass() != obj.getClass()) + return false; + Device other = (Device) obj; + if(name == null){ + if(other.name != null) + return false; + } + else if(!name.equals(other.name)) + return false; + if(os == null){ + if(other.os != null) + return false; + } + else if(!os.equals(other.os)) + return false; + return true; + } + + + + + @Override + public String toString(){ + return "OS=" + os + ", ID=" + name; + } + } + + + + + + @Override + public String humanReadable(InterfaceConstants.LANGS lang){ + //return login + " [" + ID + "]"; + return login; + } +} + + diff --git a/kz_cafe_core/src/kz/cafe/db/model/anotations/AnnotationDate.java b/kz_cafe_core/src/kz/cafe/db/model/anotations/AnnotationDate.java new file mode 100644 index 0000000..39e6284 --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/db/model/anotations/AnnotationDate.java @@ -0,0 +1,9 @@ +package kz.cafe.db.model.anotations; + +import java.lang.annotation.*; + +@Target(ElementType.FIELD) +@Retention(RetentionPolicy.RUNTIME) +public @interface AnnotationDate{ + +} diff --git a/kz_cafe_core/src/kz/cafe/db/model/anotations/AnnotationExport.java b/kz_cafe_core/src/kz/cafe/db/model/anotations/AnnotationExport.java new file mode 100644 index 0000000..24c8dcb --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/db/model/anotations/AnnotationExport.java @@ -0,0 +1,14 @@ +package kz.cafe.db.model.anotations; + +import java.lang.annotation.*; + +@Target(ElementType.FIELD) +@Retention(RetentionPolicy.RUNTIME) +public @interface AnnotationExport{ + @SuppressWarnings("rawtypes") + Class foreign(); + + String column(); + + String local_prefix(); +} diff --git a/kz_cafe_core/src/kz/cafe/db/model/anotations/AnnotationID.java b/kz_cafe_core/src/kz/cafe/db/model/anotations/AnnotationID.java new file mode 100644 index 0000000..5c2b11f --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/db/model/anotations/AnnotationID.java @@ -0,0 +1,9 @@ +package kz.cafe.db.model.anotations; + +import java.lang.annotation.*; + +@Target(ElementType.FIELD) +@Retention(RetentionPolicy.RUNTIME) +public @interface AnnotationID{ + +} diff --git a/kz_cafe_core/src/kz/cafe/db/model/anotations/AnnotationImage.java b/kz_cafe_core/src/kz/cafe/db/model/anotations/AnnotationImage.java new file mode 100644 index 0000000..ef8d058 --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/db/model/anotations/AnnotationImage.java @@ -0,0 +1,9 @@ +package kz.cafe.db.model.anotations; + +import java.lang.annotation.*; + +@Target(ElementType.FIELD) +@Retention(RetentionPolicy.RUNTIME) +public @interface AnnotationImage{ + +} diff --git a/kz_cafe_core/src/kz/cafe/db/model/anotations/AnnotationIncusiveList.java b/kz_cafe_core/src/kz/cafe/db/model/anotations/AnnotationIncusiveList.java new file mode 100644 index 0000000..ac5140b --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/db/model/anotations/AnnotationIncusiveList.java @@ -0,0 +1,10 @@ +package kz.cafe.db.model.anotations; + +import java.lang.annotation.*; + +@Target(ElementType.FIELD) +@Retention(RetentionPolicy.RUNTIME) +public @interface AnnotationIncusiveList{ + @SuppressWarnings("rawtypes") + Class foreign(); +} diff --git a/kz_cafe_core/src/kz/cafe/db/model/anotations/AnnotationIncusiveListManual.java b/kz_cafe_core/src/kz/cafe/db/model/anotations/AnnotationIncusiveListManual.java new file mode 100644 index 0000000..80575b2 --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/db/model/anotations/AnnotationIncusiveListManual.java @@ -0,0 +1,8 @@ +package kz.cafe.db.model.anotations; + +import java.lang.annotation.*; + +@Target(ElementType.FIELD) +@Retention(RetentionPolicy.RUNTIME) +public @interface AnnotationIncusiveListManual{ +} diff --git a/kz_cafe_core/src/kz/cafe/db/model/anotations/AnnotationMultiLangString.java b/kz_cafe_core/src/kz/cafe/db/model/anotations/AnnotationMultiLangString.java new file mode 100644 index 0000000..14762d0 --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/db/model/anotations/AnnotationMultiLangString.java @@ -0,0 +1,9 @@ +package kz.cafe.db.model.anotations; + +import java.lang.annotation.*; + +@Target(ElementType.FIELD) +@Retention(RetentionPolicy.RUNTIME) +public @interface AnnotationMultiLangString{ + +} diff --git a/kz_cafe_core/src/kz/cafe/db/model/anotations/AnnotationNoExportIndex.java b/kz_cafe_core/src/kz/cafe/db/model/anotations/AnnotationNoExportIndex.java new file mode 100644 index 0000000..16fa078 --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/db/model/anotations/AnnotationNoExportIndex.java @@ -0,0 +1,8 @@ +package kz.cafe.db.model.anotations; + +import java.lang.annotation.*; + +@Target(ElementType.FIELD) +@Retention(RetentionPolicy.RUNTIME) +public @interface AnnotationNoExportIndex{ +} diff --git a/kz_cafe_core/src/kz/cafe/db/model/anotations/AnnotationNotExported.java b/kz_cafe_core/src/kz/cafe/db/model/anotations/AnnotationNotExported.java new file mode 100644 index 0000000..36a8625 --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/db/model/anotations/AnnotationNotExported.java @@ -0,0 +1,9 @@ +package kz.cafe.db.model.anotations; + +import java.lang.annotation.*; + +@Target(ElementType.FIELD) +@Retention(RetentionPolicy.RUNTIME) +public @interface AnnotationNotExported{ + +} diff --git a/kz_cafe_core/src/kz/cafe/db/model/anotations/AnnotationPrice.java b/kz_cafe_core/src/kz/cafe/db/model/anotations/AnnotationPrice.java new file mode 100644 index 0000000..dbb1bb7 --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/db/model/anotations/AnnotationPrice.java @@ -0,0 +1,9 @@ +package kz.cafe.db.model.anotations; + +import java.lang.annotation.*; + +@Target(ElementType.FIELD) +@Retention(RetentionPolicy.RUNTIME) +public @interface AnnotationPrice{ + +} diff --git a/kz_cafe_core/src/kz/cafe/db/model/anotations/AnnotationRelated.java b/kz_cafe_core/src/kz/cafe/db/model/anotations/AnnotationRelated.java new file mode 100644 index 0000000..9fd03be --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/db/model/anotations/AnnotationRelated.java @@ -0,0 +1,10 @@ +package kz.cafe.db.model.anotations; + +import java.lang.annotation.*; + +@Target(ElementType.FIELD) +@Retention(RetentionPolicy.RUNTIME) +public @interface AnnotationRelated{ + @SuppressWarnings("rawtypes") + Class foreign(); +} diff --git a/kz_cafe_core/src/kz/cafe/db/model/anotations/AnnotationTime.java b/kz_cafe_core/src/kz/cafe/db/model/anotations/AnnotationTime.java new file mode 100644 index 0000000..47fcbb8 --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/db/model/anotations/AnnotationTime.java @@ -0,0 +1,9 @@ +package kz.cafe.db.model.anotations; + +import java.lang.annotation.*; + +@Target(ElementType.FIELD) +@Retention(RetentionPolicy.RUNTIME) +public @interface AnnotationTime{ + +} diff --git a/kz_cafe_core/src/kz/cafe/db/service/MongoFeedbackService.java b/kz_cafe_core/src/kz/cafe/db/service/MongoFeedbackService.java new file mode 100644 index 0000000..a7adec1 --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/db/service/MongoFeedbackService.java @@ -0,0 +1,44 @@ +package kz.cafe.db.service; + +import com.google.code.morphia.query.*; +import kz.cafe.db.*; +import kz.cafe.db.model.*; + +public class MongoFeedbackService{ + + public static void racalculte(int ID){ + MFeedback mFeedback = MongoService.ds.find(MFeedback.class, MFeedback.F_ID, ID).get(); + + if(mFeedback == null){ + return; + } + + long lTotalCount = 0; + long lRate = 0; + + for(int f = 1; f < 6; f++){ + long lCount = MongoService.ds.find(MFeedback.class) + .filter(MFeedback.F_CID, mFeedback.CID) + .filter(MFeedback.F_RATE, f) + .filter(MFeedback.F_DELETED, false) + .filter(MFeedback.F_PUBLISHED, true) + .countAll(); + + lTotalCount += lCount; + lRate += lCount * f; + } + + + if(lTotalCount > 0){ + lRate = lRate / lTotalCount; + } + + + + Query q = MongoService.ds.createQuery(MCafe.class).filter(MCafe.F_ID, mFeedback.CID); + UpdateOperations uOps = + MongoService.ds.createUpdateOperations(MCafe.class).set(MCafe.F_RATE, lRate).set(MCafe.F_UPDATED, System.currentTimeMillis()); + MongoService.ds.findAndModify(q, uOps); + } + +} diff --git a/kz_cafe_core/src/kz/cafe/db/service/MongoOrderService.java b/kz_cafe_core/src/kz/cafe/db/service/MongoOrderService.java new file mode 100644 index 0000000..b9d3468 --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/db/service/MongoOrderService.java @@ -0,0 +1,63 @@ +package kz.cafe.db.service; + +import com.google.code.morphia.query.*; +import kz.cafe.constants.*; +import kz.cafe.db.*; +import kz.cafe.db.model.*; + +public class MongoOrderService{ + + public static void racalculteCounters(MOrder mOrder){ + + + long lTotalCount = MongoService.ds.find(MOrder.class) + .filter(MOrder.F_UID, mOrder.UID) + .countAll(); + + + long lTotalPaid = MongoService.ds.find(MOrder.class) + .filter(MOrder.F_UID, mOrder.UID) + .filter(MOrder.F_STATUS, OrderConstants.STATUS.PAID.ordinal()) + .countAll(); + + + + + Query q = MongoService.ds.createQuery(MUser.class).filter(MUser.F_ID, mOrder.UID); + + UpdateOperations uOps = + MongoService.ds.createUpdateOperations(MUser.class).set(MUser.F_COUNTER_ORDERS_TOTAL, lTotalCount); + MongoService.ds.findAndModify(q, uOps); + + + uOps = MongoService.ds.createUpdateOperations(MUser.class).set(MUser.F_COUNTER_ORDERS_PAID, lTotalPaid); + MongoService.ds.findAndModify(q, uOps); + } + public static int racalcultePrice(MOrder mOrder){ + //Let's calculate the price + mOrder.price = 0; + for(MOrderItem mOrderItem : MongoService.ds.find(MOrderItem.class, MOrderItem.F_OID, mOrder.ID)){ + mOrder.price += mOrderItem.quantity * (MongoService.get(MCourse.class, mOrderItem.MID).price); + } + + Query qOrder = MongoService.ds.createQuery(MOrder.class).filter(MOrder.F_ID, mOrder.ID); + UpdateOperations uOrder = MongoService.ds.createUpdateOperations(MOrder.class).set(MOrder.F_PRICE, mOrder.price); + MongoService.ds.findAndModify(qOrder, uOrder); + + return mOrder.price; + } + + + + + + + public static int racalculteOrderItemPrice(MOrderItem mOrderItem){ + mOrderItem.price = mOrderItem.quantity * (MongoService.get(MCourse.class, mOrderItem.MID).price); + MongoService.ds.save(mOrderItem); + + return mOrderItem.price; + } + + +} diff --git a/kz_cafe_core/src/kz/cafe/db/service/MongoUserService.java b/kz_cafe_core/src/kz/cafe/db/service/MongoUserService.java new file mode 100644 index 0000000..dfda1b8 --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/db/service/MongoUserService.java @@ -0,0 +1,106 @@ +package kz.cafe.db.service; + +import javax.mail.internet.*; +import kz.cafe.db.*; +import kz.cafe.db.model.*; +import kz.cafe.exceptions.*; +import org.apache.commons.logging.*; +import com.mongodb.*; + +public class MongoUserService extends MongoService{ + private static Log log = LogFactory.getLog(MongoUserService.class); + + private static final String LOG = "[MONGO User] "; + + + + + + + + public static MUser createEmptyProfile(String sLogin) throws AbstractException{ + try{ + InternetAddress emailAddr = new InternetAddress(sLogin); + emailAddr.validate(); + } + catch (AddressException ex){ + throw new MaulformedLoginException(sLogin); + } + + + MUser mUserProfile = new MUser(); + mUserProfile.login = sLogin; + mUserProfile.ID = MongoService.getUniqueID(MUser.class); + save(mUserProfile); + + return mUserProfile; + } + + + + + + public static MUser getUserProfile(int UID) throws UserNotFoundException{ + log.debug(LOG + "getUser() UID=" + UID); + + MUser mUserProfile4 = ds.find(MUser.class, MUser.F_UID, UID).get(); + + if(mUserProfile4 == null){ + throw new UserNotFoundException(UID); + } + + if(log.isDebugEnabled()){ + log.debug(LOG + mUserProfile4.toString()); + } + + return mUserProfile4; + } + + + + + + + public static MUser getUserProfile(String sLogin) throws LoginNotFoundException{ + log.debug(LOG + "getUser() Login=" + sLogin); + + sLogin = sLogin.toLowerCase(); + + MUser mUser = ds.find(MUser.class, MUser.F_LOGIN, sLogin).get(); + + if(mUser == null){ + throw new LoginNotFoundException(sLogin); + } + + log.debug(LOG + mUser); + + return mUser; + } + + + + + + + + public static void save(MUser mUser) throws AbstractException{ + log.debug(LOG + "saveUser() UID=" + mUser.ID); + + mUser.login = mUser.login.toLowerCase(); + + try{ + ds.save(mUser); + } + catch (MongoException.DuplicateKey e){ + if(e.getMessage().toLowerCase().contains("$login")){ + log.debug(LOG + "Login is busy."); + throw new DuplcateLoginException(mUser.login); + } + else{ + throw e; + } + } + + log.debug(LOG + "ok, saved."); + } +} diff --git a/kz_cafe_core/src/kz/cafe/exceptions/AbstractException.java b/kz_cafe_core/src/kz/cafe/exceptions/AbstractException.java new file mode 100644 index 0000000..5c7d27f --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/exceptions/AbstractException.java @@ -0,0 +1,73 @@ +package kz.cafe.exceptions; + +public class AbstractException extends Exception{ + + private static final long serialVersionUID = -3540280291673499998L; + + protected String sMsg; + protected Throwable originalException; + protected int errorCode; + + + + + + public AbstractException(int errorCode, String sMsg){ + this.errorCode = errorCode; + this.sMsg = sMsg; + } + + + + + + public AbstractException(int errorCode, String sMsg, Throwable originalException){ + this.errorCode = errorCode; + this.sMsg = sMsg; + this.originalException = originalException; + } + + + + + + public String getsMsg(){ + return sMsg; + } + + + + + + public Throwable getOriginalException(){ + return originalException; + } + + + + + + public int getErrorCode(){ + return errorCode; + } + + + + + + + @Override + public String toString(){ + StringBuilder sb = new StringBuilder(); + + sb.append("errorCode=" + errorCode + ", sMsg=" + sMsg); + + if(originalException == null) { + } + else{ + sb.append(", originalException=" + originalException); + } + + return sb.toString(); + } +} diff --git a/kz_cafe_core/src/kz/cafe/exceptions/AbstractSecurityException.java b/kz_cafe_core/src/kz/cafe/exceptions/AbstractSecurityException.java new file mode 100644 index 0000000..e1e752b --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/exceptions/AbstractSecurityException.java @@ -0,0 +1,14 @@ +package kz.cafe.exceptions; + +public class AbstractSecurityException extends AbstractException{ + private static final long serialVersionUID = 5191104808675473223L; + + + public AbstractSecurityException(int errorCode, String sMsg, Throwable originalException){ + super(errorCode, sMsg, originalException); + } + + public AbstractSecurityException(int errorCode, String sMsg){ + super(errorCode, sMsg); + } +} diff --git a/kz_cafe_core/src/kz/cafe/exceptions/AccessDeniedException.java b/kz_cafe_core/src/kz/cafe/exceptions/AccessDeniedException.java new file mode 100644 index 0000000..eb25da1 --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/exceptions/AccessDeniedException.java @@ -0,0 +1,13 @@ +package kz.cafe.exceptions; + +import kz.cafe.constants.*; + + +public class AccessDeniedException extends AbstractException{ + private static final long serialVersionUID = -1975203208178064809L; + + public AccessDeniedException(Class t, int ID){ + super(OperationConstants.OBJECT_ACCESS_DENIED, "Can not access " + t + " ID=" + ID); + } + +} diff --git a/kz_cafe_core/src/kz/cafe/exceptions/BadDataException.java b/kz_cafe_core/src/kz/cafe/exceptions/BadDataException.java new file mode 100644 index 0000000..d462bf4 --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/exceptions/BadDataException.java @@ -0,0 +1,14 @@ +package kz.cafe.exceptions; + +import kz.cafe.constants.*; + +public class BadDataException extends AbstractException{ + private static final long serialVersionUID = 1087044566579116032L; + + + + public BadDataException(String sParamName, String sMsg, String sAllowed){ + super(OperationConstants.DATA_WRONG_FORMAT, + "Wrong value=" + sMsg + ". Allowed: [" + sAllowed + "]"); + } +} diff --git a/kz_cafe_core/src/kz/cafe/exceptions/DuplcateLoginException.java b/kz_cafe_core/src/kz/cafe/exceptions/DuplcateLoginException.java new file mode 100644 index 0000000..25e3ccd --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/exceptions/DuplcateLoginException.java @@ -0,0 +1,12 @@ +package kz.cafe.exceptions; + +import kz.cafe.constants.*; + +public class DuplcateLoginException extends AbstractException{ + private static final long serialVersionUID = -7448428048649284591L; + + + public DuplcateLoginException(String sEmail){ + super(OperationConstants.USER_LOGIN_IS_BUSY, "Login=" + sEmail + " is busy."); + } +} diff --git a/kz_cafe_core/src/kz/cafe/exceptions/LangNotSupportedException.java b/kz_cafe_core/src/kz/cafe/exceptions/LangNotSupportedException.java new file mode 100644 index 0000000..25a5fa8 --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/exceptions/LangNotSupportedException.java @@ -0,0 +1,14 @@ +package kz.cafe.exceptions; + +import java.util.*; +import kz.cafe.constants.*; + + +public class LangNotSupportedException extends AbstractException{ + private static final long serialVersionUID = -1975203208178064809L; + + public LangNotSupportedException(String sLang){ + super(OperationConstants.LANGUAGE_NOT_SUPPORTED, "Lang=" + sLang + " is not supported. The supported are:" + Arrays.asList(InterfaceConstants.LANGS.values())); + } + +} diff --git a/kz_cafe_core/src/kz/cafe/exceptions/LoginFailedException.java b/kz_cafe_core/src/kz/cafe/exceptions/LoginFailedException.java new file mode 100644 index 0000000..0bd9979 --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/exceptions/LoginFailedException.java @@ -0,0 +1,13 @@ +package kz.cafe.exceptions; + +import kz.cafe.constants.*; + +public class LoginFailedException extends AbstractException{ + private static final long serialVersionUID = -7448428048649284591L; + + + public LoginFailedException(String sLogin, String sPassword){ + super(OperationConstants.USER_WRONG_PASSWORD, + "Wrong password for login='" + sLogin); + } +} diff --git a/kz_cafe_core/src/kz/cafe/exceptions/LoginNotFoundException.java b/kz_cafe_core/src/kz/cafe/exceptions/LoginNotFoundException.java new file mode 100644 index 0000000..ebb8fdd --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/exceptions/LoginNotFoundException.java @@ -0,0 +1,14 @@ +package kz.cafe.exceptions; + +import kz.cafe.constants.*; + + +public class LoginNotFoundException extends AbstractException{ + private static final long serialVersionUID = -7448428048649284591L; + + + public LoginNotFoundException(String sLogin){ + super(OperationConstants.USER_LOGIN_NOT_FOUND, + "'" + sLogin + "' not found"); + } +} diff --git a/kz_cafe_core/src/kz/cafe/exceptions/MaulformedLoginException.java b/kz_cafe_core/src/kz/cafe/exceptions/MaulformedLoginException.java new file mode 100644 index 0000000..9b5e12d --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/exceptions/MaulformedLoginException.java @@ -0,0 +1,13 @@ +package kz.cafe.exceptions; + +import kz.cafe.constants.*; + +public class MaulformedLoginException extends AbstractException{ + private static final long serialVersionUID = -7448428048649284591L; + + + public MaulformedLoginException(String sLogin){ + super(OperationConstants.USER_LOGIN_IS_NOT_AN_EMAIL, + "'" + sLogin + "' is invalid email address"); + } +} diff --git a/kz_cafe_core/src/kz/cafe/exceptions/ObjectNotFoundException.java b/kz_cafe_core/src/kz/cafe/exceptions/ObjectNotFoundException.java new file mode 100644 index 0000000..595551a --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/exceptions/ObjectNotFoundException.java @@ -0,0 +1,17 @@ +package kz.cafe.exceptions; + +import kz.cafe.constants.*; + + +public class ObjectNotFoundException extends AbstractException{ + private static final long serialVersionUID = 5231977118260542660L; + + + + + + public ObjectNotFoundException(Class classObject, long ID){ + super(OperationConstants.OBJECT_NOT_FOUND, "No " + classObject.getSimpleName() + "=" + ID + " in the database."); + } + +} diff --git a/kz_cafe_core/src/kz/cafe/exceptions/ServiceConfigurationException.java b/kz_cafe_core/src/kz/cafe/exceptions/ServiceConfigurationException.java new file mode 100644 index 0000000..4987350 --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/exceptions/ServiceConfigurationException.java @@ -0,0 +1,23 @@ +package kz.cafe.exceptions; + + +public class ServiceConfigurationException extends Error{ + private static final long serialVersionUID = 5890759343572267390L; + + + + + + public ServiceConfigurationException(String sMsg, Throwable originalException){ + super(sMsg, originalException); + } + + + + + + public ServiceConfigurationException(String sMsg){ + super(sMsg); + } + +} diff --git a/kz_cafe_core/src/kz/cafe/exceptions/SessionNotFoundException.java b/kz_cafe_core/src/kz/cafe/exceptions/SessionNotFoundException.java new file mode 100644 index 0000000..44e3f49 --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/exceptions/SessionNotFoundException.java @@ -0,0 +1,12 @@ +package kz.cafe.exceptions; + +import kz.cafe.constants.*; + +public class SessionNotFoundException extends AbstractSecurityException{ + private static final long serialVersionUID = -4521463803795913647L; + + + public SessionNotFoundException(String SID){ + super(OperationConstants.USER_SESSION_INVALID, "SID=" + SID + " is unknown"); + } +} diff --git a/kz_cafe_core/src/kz/cafe/exceptions/UserNotFoundException.java b/kz_cafe_core/src/kz/cafe/exceptions/UserNotFoundException.java new file mode 100644 index 0000000..61b2090 --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/exceptions/UserNotFoundException.java @@ -0,0 +1,17 @@ +package kz.cafe.exceptions; + +import kz.cafe.constants.*; + + +public class UserNotFoundException extends AbstractException{ + private static final long serialVersionUID = 5231977118260542660L; + + + + + + public UserNotFoundException(long UID){ + super(OperationConstants.USER_NOT_FOUND, "No UserID=" + UID + " in the database."); + } + +} diff --git a/kz_cafe_core/src/kz/cafe/logs/LogTableFormatter.java b/kz_cafe_core/src/kz/cafe/logs/LogTableFormatter.java new file mode 100644 index 0000000..75f25f9 --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/logs/LogTableFormatter.java @@ -0,0 +1,293 @@ +package kz.cafe.logs; + +import java.io.*; +import java.util.*; + + + +/** + * Cute Table Formatter. + * + *

+ * Title: + *

+ * + *

+ * History: + * 3.2 Cell Width, row numbers + * 3.1 Empty cell right border bugfix + * 3.0 No-border mode has been added. + * 2.4 Fixed the bug with non finished rows without br/separator + *

+ * + *

+ * Copyright: Copyright (c) 2008,2009,2010,2011,2012 + *

+ * + *

+ *

+ * + * @author Alexey Zemskov + * @version 3.2 + */ +public class LogTableFormatter{ + + // All text + private LinkedList listTable; + + // The widthes of rows. + private List listWidths; + + // The space aroung twext in a cell + private int iPadding; + + private boolean bPrintBorder; + + + + + + /** + * This class wraps table data into nice align tables. + * + */ + public LogTableFormatter(){ + this.listTable = new LinkedList(); + + this.listWidths = new ArrayList(); + this.iPadding = 0; + this.bPrintBorder = true; + } + + + + + + public LogTableFormatter(int iPadding, boolean bPrintBorder){ + this(); + this.iPadding = iPadding; + this.bPrintBorder = bPrintBorder; + } + + + + + + public void newSeparator(){ + this.listTable.add(new RowSeparator()); + } + + + + + + public void br(){ + this.listTable.add(new RowEnd()); + } + + + + + + public void addCell(Number numCell){ + addCell("" + numCell); + } + + + + + + public void addCell(Object cell){ + addCell("" + cell); + } + public void addCell(int iWidth, Object sCell){ + addCell(iWidth, "" + sCell); + } + + + + + + public void addCell(String sCell){ + String sNullPointerProtectedCell = "" + sCell; + addCell(sNullPointerProtectedCell.length(), sNullPointerProtectedCell); + } + + + + public void addCell(int iWidth, String sCell){ + if(this.listTable.isEmpty() || (!(this.listTable.getLast() instanceof RowData))){ + this.listTable.add(new RowData()); + } + + RowData rowData = (RowData) this.listTable.getLast(); + + String sNullPointerProtectedCell = "" + sCell; + + int iNullPointerProtectedCellLength = sNullPointerProtectedCell.length(); + if(iWidth < iNullPointerProtectedCellLength){ + iWidth = iNullPointerProtectedCellLength; + } + + + rowData.addCell(sNullPointerProtectedCell); + + if(listWidths.size() < rowData.listCells.size()){ + listWidths.add(iWidth); + } + else{ + Integer intWidth = listWidths.get(rowData.listCells.size() - 1); + + if(intWidth < iWidth){ + // The cell is narrower. + listWidths.set(rowData.listCells.size() - 1, iWidth); + } + else{ + // The cell is widther. + // Nothing to do. + } + } + } + + + + + + public void addCellGroup(List sRow){ + for(String sCell : sRow){ + this.addCell(sCell); + } + } + + + + + + public int rowCount(){ + return listTable.size(); + } + + + + + + public String toString(){ + StringWriter swResult = new StringWriter(); + + String sBorder = this.getBorder(); + String sPadding = this.getPadding(); + + if(this.bPrintBorder){ + swResult.write(sBorder + "\n"); + } + + for(TableRow tableRow : this.listTable){ + + // data + if(tableRow instanceof RowData){ + RowData rowData = (RowData) tableRow; + + if(this.bPrintBorder){ + swResult.write("|"); + } + + for(ListIterator it = rowData.listCells.listIterator(); it.hasNext();){ + String sCell = it.next(); + swResult.write(sPadding + sCell + sPadding); + + swResult.write(getTab(this.listWidths.get(it.nextIndex() - 1) - sCell.length())); + if(this.bPrintBorder){ + swResult.write("|"); + } + } + + //Empty tail of not filled cells + //Row <1> <2> <3> + //<1> is filled + //Let's paing <2> <3> as empty + for(int f = rowData.listCells.size(); f < this.listWidths.size(); f++){ + swResult.write(getTab(this.listWidths.get(f) + this.iPadding * 2)); + if(this.bPrintBorder){ + swResult.write("|"); + } + } + swResult.write("\n"); + } + + // separator + else if(tableRow instanceof RowSeparator){ + if(this.bPrintBorder){ + swResult.write(sBorder + "\n"); + } + } + } + + if(this.bPrintBorder){ + swResult.write(sBorder); + } + + return swResult.toString(); + } + + + + + + private String getBorder(){ + StringWriter swResult = new StringWriter(); + + swResult.write("+"); + for(Integer intWidth : this.listWidths){ + for(int f = 0; f < intWidth + this.iPadding * 2; f++){ + swResult.write("-"); + } + swResult.write("+"); + } + + return swResult.toString(); + } + + + + + + private String getPadding(){ + return this.getTab(this.iPadding); + } + + + + + + private String getTab(int size){ + StringWriter swResult = new StringWriter(); + + for(int f = 0; f < size; f++){ + swResult.write(" "); + } + + return swResult.toString(); + } + + private interface TableRow{ + } + + private class RowData implements TableRow{ + public List listCells = new LinkedList(); + + + + + + public void addCell(String sData){ + listCells.add(sData); + } + } + + private class RowSeparator implements TableRow{ + } + + private class RowEnd implements TableRow{ + } + +} diff --git a/kz_cafe_core/src/kz/cafe/logs/LogTreeFormatter.java b/kz_cafe_core/src/kz/cafe/logs/LogTreeFormatter.java new file mode 100644 index 0000000..ac958c9 --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/logs/LogTreeFormatter.java @@ -0,0 +1,149 @@ +package kz.cafe.logs; + + +import java.util.*; + + + +public class LogTreeFormatter{ + + private Node nodeRoot; + + + private int iPadding = 6; + + + + public LogTreeFormatter(String sName){ + this.nodeRoot = new Node(sName); + } + + + + public LogTreeFormatter(String sName, int iPadding){ + this.nodeRoot = new Node(sName); + this.iPadding = iPadding; + } + + + + + + public Node getRoot(){ + return nodeRoot; + } + + + + + + + + public String toString(){ + StringBuilder sbResult = new StringBuilder(); + + sbResult.append(printNode(0, nodeRoot)); + + return sbResult.toString(); + } + + + + + + + private StringBuilder printNode(int offset, Node node){ + StringBuilder sb = new StringBuilder(); + + Node nodeParent = node.parent; + + for(int f = 0; f < offset; f++){ + if(f > 0 && f % iPadding == 0){ + if(nodeParent.last == true){ + sb.insert(0, " "); + } + else { + sb.insert(1, "|"); + } + + nodeParent = nodeParent.parent; + } + else { + sb.insert(0, " "); + } + } + sb.append("|-" + node.getName() + "\n"); + + + for(Iterator it = node.getChildren().iterator(); it.hasNext(); ){ + Node nodeChild = it.next(); + + sb.append(printNode(offset + iPadding, nodeChild)); + } + + + return sb; + } + + + + + + + + public class Node{ + + private final List children = new ArrayList(); + + private final String name; + private Node parent = null; + private boolean last = true; + + + + + public Node(String name){ + this.name = name; + } + + + + + + public Node addNode(Number nName){ + return addNode("" + nName); + } + + + + + + public Node addNode(String sName){ + Node node = new Node(sName); + node.parent = this; + + for(Node nodeChild : children){ + nodeChild.last = false; + } + + children.add(node); + return node; + } + + + + + + public List getChildren(){ + return children; + } + + + + + + public String getName(){ + return name; + } + } +} diff --git a/kz_cafe_core/src/kz/cafe/misc/RubCafeConverter.java b/kz_cafe_core/src/kz/cafe/misc/RubCafeConverter.java new file mode 100644 index 0000000..a04ea1a --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/misc/RubCafeConverter.java @@ -0,0 +1,31 @@ +package kz.cafe.misc; + +import kz.cafe.db.*; +import kz.cafe.db.model.*; + +public class RubCafeConverter{ + + /** + * @param args + */ + public static void main(String[] args){ + for(MCafe mCafe : MongoService.getList(MCafe.class)){ + mCafe.timeCloseMo = mCafe.timeClose; + mCafe.timeOpenMo = mCafe.timeOpen; + mCafe.timeCloseTu = mCafe.timeClose; + mCafe.timeOpenTu = mCafe.timeOpen; + mCafe.timeCloseWe = mCafe.timeClose; + mCafe.timeOpenWe = mCafe.timeOpen; + mCafe.timeCloseTh = mCafe.timeClose; + mCafe.timeOpenTh = mCafe.timeOpen; + mCafe.timeCloseFr = mCafe.timeClose; + mCafe.timeOpenFr = mCafe.timeOpen; + mCafe.timeCloseSa = mCafe.timeCloseWeekend; + mCafe.timeOpenSa = mCafe.timeOpenWeekend; + mCafe.timeCloseSu = mCafe.timeCloseWeekend; + mCafe.timeOpenSu = mCafe.timeOpenWeekend; + + MongoService.save(mCafe); + } + } +} diff --git a/kz_cafe_core/src/kz/cafe/utils/Mailer.java b/kz_cafe_core/src/kz/cafe/utils/Mailer.java new file mode 100644 index 0000000..5f90159 --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/utils/Mailer.java @@ -0,0 +1,71 @@ +package kz.cafe.utils; + +import java.util.*; +import javax.mail.*; +import javax.mail.internet.*; +import org.apache.commons.logging.*; +import kz.cafe.constants.*; + + + +public class Mailer{ + private static Log log = LogFactory.getLog(Mailer.class); + + private static final String LOG = "[MAIL] "; + + + public static void sendMail(final String sFrom, final String sTo, final String sSubject, final String sMessage){ + + Thread th = new Thread(){ + public void run(){ + log.debug(LOG + "from=" + sFrom + " to=" + sTo + " " + sSubject + " " + sMessage); + + // Get system properties + Properties properties = new Properties(); + + // Setup mail server + properties.put("mail.smtp.host", ServerConstants.getEmailSmtpServer()); + properties.put("mail.user", ServerConstants.getEmailSmtpUser()); + properties.put("mail.password", ServerConstants.getEmailSmtpPassword()); + properties.put("mail.smtp.auth", "true"); + + Authenticator auth = new SMTPAuthenticator(); + Session session = Session.getInstance(properties, auth); + + try{ + // Create a default MimeMessage object. + MimeMessage message = new MimeMessage(session); + + // Set From: header field of the header. + message.setFrom(new InternetAddress(sFrom)); + + // Set To: header field of the header. + message.addRecipient(Message.RecipientType.TO, new InternetAddress(sTo)); + + // Set Subject: header field + message.setSubject(sSubject); + + // Now set the actual message + message.setText(sMessage); + + // Send message + Transport.send(message); + } + catch (MessagingException mex){ + mex.printStackTrace(); + } + } + }; + + th.start(); + } + + + private static class SMTPAuthenticator extends javax.mail.Authenticator { + public PasswordAuthentication getPasswordAuthentication() { + String username = ServerConstants.getEmailSmtpUser(); + String password = ServerConstants.getEmailSmtpPassword(); + return new PasswordAuthentication(username, password); + } + } +} diff --git a/kz_cafe_core/src/kz/cafe/utils/VelocityProc.java b/kz_cafe_core/src/kz/cafe/utils/VelocityProc.java new file mode 100644 index 0000000..cb2883e --- /dev/null +++ b/kz_cafe_core/src/kz/cafe/utils/VelocityProc.java @@ -0,0 +1,49 @@ +package kz.cafe.utils; + +import java.io.*; +import java.util.*; +import org.apache.commons.logging.*; +import org.apache.velocity.*; +import org.apache.velocity.app.*; + +public class VelocityProc{ + private static Log log = LogFactory.getLog(VelocityProc.class); + + private static final String LOG = "[VELOCITY] "; + + + public static String run(String sTemplate, Map context) throws Exception{ + StringWriter writerResult = new StringWriter(); + PrintWriter out = new PrintWriter(writerResult); + + VelocityContext vc = new VelocityContext(); + + for(String sKey : context.keySet()){ + vc.put(sKey, context.get(sKey)); + } + + Properties p = new Properties(); + + p.put("resource.loader","class"); + p.put("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader"); + + //String absolutePath=new File(Thread.currentThread().getContextClassLoader().getResource("").getFile()).getParentFile().getParentFile().getPath(); + //p.put("file.resource.loader.path", absolutePath + "/WEB-INF/classes"); + +// p.setProperty("file.resource.loader.path", "/opt"); +// Velocity.init( p ); + + Velocity.init(p); + + + Template t = Velocity.getTemplate(sTemplate, "UTF-8"); + t.merge(vc, out); + out.flush(); + out.close(); + + log.debug(LOG + writerResult.toString()); + + return writerResult.toString(); + } + +} diff --git a/kz_cafe_core/src/log4j.dtd b/kz_cafe_core/src/log4j.dtd new file mode 100644 index 0000000..1aabd96 --- /dev/null +++ b/kz_cafe_core/src/log4j.dtd @@ -0,0 +1,227 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kz_cafe_core/src/log4j.xml b/kz_cafe_core/src/log4j.xml new file mode 100644 index 0000000..c596888 --- /dev/null +++ b/kz_cafe_core/src/log4j.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kz_cafe_core/src/new_feedback.vm b/kz_cafe_core/src/new_feedback.vm new file mode 100644 index 0000000..bc95d25 --- /dev/null +++ b/kz_cafe_core/src/new_feedback.vm @@ -0,0 +1,9 @@ +Новый отзыв для: $cafe_name + +От: $user_name $user_login $user_phone + +Заголовок: $title + +Рейт: $rate + +Текст: $text diff --git a/kz_cafe_core/src/new_order.vm b/kz_cafe_core/src/new_order.vm new file mode 100644 index 0000000..0e85dea --- /dev/null +++ b/kz_cafe_core/src/new_order.vm @@ -0,0 +1,20 @@ +Новый Заказ в: $cafe_name + +От: $user_name $user_login $user_phone + +Состав: #set($number = 0) +#foreach($item in $items) + #set($number = $number + 1) + + $number. $item.getName() + Кол-во: $item.getQuantity() + Цена за 1 шт: $item.getPrice() +#end + + +Комментарий: $comment + + +------------------------ +Предв. цена: $price + diff --git a/kz_cafe_core/src/new_reserve.vm b/kz_cafe_core/src/new_reserve.vm new file mode 100644 index 0000000..0144dcc --- /dev/null +++ b/kz_cafe_core/src/new_reserve.vm @@ -0,0 +1,9 @@ +Новая Бронь в: $cafe_name + +От: $user_name $user_login $user_phone + +Мест: $sits + +Дата: $date + +Комментарий: $comment diff --git a/kz_cafe_core/src/server.properties b/kz_cafe_core/src/server.properties new file mode 100644 index 0000000..1afa5e2 --- /dev/null +++ b/kz_cafe_core/src/server.properties @@ -0,0 +1,30 @@ +internal_logger_format=%d [%t] [%c] %m%n[%-5p %C %M.%L %x]%n%n + +log_paths=Z:/ + +image_directory=C:/Tomcat/6_0_37/webapps/1 +#image_url=http://localhost:8180/1 +image_url=http://bonmenu.kz:6007/images + +audio_url=http://bonmenu.kz:6007/audio + + +#email_support=true +#email_service=http://moscow.silyus.com:8080/mail/ + +email_smtp_host=localhost +email_smtp_port=25 +email_smtp_user=robot@bonmenu.kz +email_smtp_password=hruk +email_robot=robot@bonmenu.kz +email_address_feedback=a.zemskov@gmail.com + + +debug=true + +database_name=kz_cafe +#database_ip=localhost +database_ip=servers4.me +#database_ip=bonmenu.kz + + diff --git a/kz_cafe_core/src/template_email_confirmation_en.txt b/kz_cafe_core/src/template_email_confirmation_en.txt new file mode 100644 index 0000000..b11359d --- /dev/null +++ b/kz_cafe_core/src/template_email_confirmation_en.txt @@ -0,0 +1,8 @@ +Здравствуйте, + +Ваш адрес %email% в проекте BonMenu.kz требует подтверждения. + +Перейдите, пожалуйста, по этой ссылке: +%confirmation_link% + +Команда BonMenu.kz \ No newline at end of file diff --git a/kz_cafe_core/src/template_email_confirmation_kz.txt b/kz_cafe_core/src/template_email_confirmation_kz.txt new file mode 100644 index 0000000..b11359d --- /dev/null +++ b/kz_cafe_core/src/template_email_confirmation_kz.txt @@ -0,0 +1,8 @@ +Здравствуйте, + +Ваш адрес %email% в проекте BonMenu.kz требует подтверждения. + +Перейдите, пожалуйста, по этой ссылке: +%confirmation_link% + +Команда BonMenu.kz \ No newline at end of file diff --git a/kz_cafe_core/src/template_email_confirmation_ru.txt b/kz_cafe_core/src/template_email_confirmation_ru.txt new file mode 100644 index 0000000..b11359d --- /dev/null +++ b/kz_cafe_core/src/template_email_confirmation_ru.txt @@ -0,0 +1,8 @@ +Здравствуйте, + +Ваш адрес %email% в проекте BonMenu.kz требует подтверждения. + +Перейдите, пожалуйста, по этой ссылке: +%confirmation_link% + +Команда BonMenu.kz \ No newline at end of file diff --git a/kz_cafe_core/src/template_email_confirmation_ua.txt b/kz_cafe_core/src/template_email_confirmation_ua.txt new file mode 100644 index 0000000..b11359d --- /dev/null +++ b/kz_cafe_core/src/template_email_confirmation_ua.txt @@ -0,0 +1,8 @@ +Здравствуйте, + +Ваш адрес %email% в проекте BonMenu.kz требует подтверждения. + +Перейдите, пожалуйста, по этой ссылке: +%confirmation_link% + +Команда BonMenu.kz \ No newline at end of file diff --git a/kz_cafe_core/src/template_password_recovery_en.txt b/kz_cafe_core/src/template_password_recovery_en.txt new file mode 100644 index 0000000..6e2d400 --- /dev/null +++ b/kz_cafe_core/src/template_password_recovery_en.txt @@ -0,0 +1,7 @@ +Hello, + +Here is your BonMenu.kz account info: +login=%login% +password=%password% + +/Support \ No newline at end of file diff --git a/kz_cafe_core/src/template_password_recovery_kz.txt b/kz_cafe_core/src/template_password_recovery_kz.txt new file mode 100644 index 0000000..03a2833 --- /dev/null +++ b/kz_cafe_core/src/template_password_recovery_kz.txt @@ -0,0 +1,7 @@ +Здравствуйте, + +Ваш пароль для приложения BonMenu.kz +login=%login% +password=%password% + +Команда BonMenu.kz \ No newline at end of file diff --git a/kz_cafe_core/src/template_password_recovery_ru.txt b/kz_cafe_core/src/template_password_recovery_ru.txt new file mode 100644 index 0000000..03a2833 --- /dev/null +++ b/kz_cafe_core/src/template_password_recovery_ru.txt @@ -0,0 +1,7 @@ +Здравствуйте, + +Ваш пароль для приложения BonMenu.kz +login=%login% +password=%password% + +Команда BonMenu.kz \ No newline at end of file diff --git a/kz_cafe_core/src/template_password_recovery_ua.txt b/kz_cafe_core/src/template_password_recovery_ua.txt new file mode 100644 index 0000000..03a2833 --- /dev/null +++ b/kz_cafe_core/src/template_password_recovery_ua.txt @@ -0,0 +1,7 @@ +Здравствуйте, + +Ваш пароль для приложения BonMenu.kz +login=%login% +password=%password% + +Команда BonMenu.kz \ No newline at end of file diff --git a/kz_cafe_core/template.xls b/kz_cafe_core/template.xls new file mode 100644 index 0000000..77e0a78 Binary files /dev/null and b/kz_cafe_core/template.xls differ