22
33import java .util .LinkedHashMap ;
44
5+ import com .logicaldoc .gui .common .client .grid .IdListGridField ;
6+ import com .logicaldoc .gui .common .client .i18n .I18N ;
57import com .logicaldoc .gui .common .client .util .ItemFactory ;
68import com .logicaldoc .gui .common .client .widgets .DocumentSelector ;
7- import com .logicaldoc .i18n . I18N ;
9+ import com .logicaldoc .gui . frontend . client . ai . sampler . GUISampler ;
810import com .smartgwt .client .data .AdvancedCriteria ;
11+ import com .smartgwt .client .types .AutoFitWidthApproach ;
912import com .smartgwt .client .types .OperatorId ;
13+ import com .smartgwt .client .types .SelectionStyle ;
1014import com .smartgwt .client .types .TitleOrientation ;
1115import com .smartgwt .client .widgets .form .DynamicForm ;
1216import com .smartgwt .client .widgets .form .fields .SelectItem ;
1317import com .smartgwt .client .widgets .form .fields .StaticTextItem ;
1418import com .smartgwt .client .widgets .form .fields .TextAreaItem ;
1519import com .smartgwt .client .widgets .form .fields .TextItem ;
1620import com .smartgwt .client .widgets .form .fields .events .ChangedHandler ;
21+ import com .smartgwt .client .widgets .grid .ListGrid ;
22+ import com .smartgwt .client .widgets .grid .ListGridField ;
23+ import com .smartgwt .client .widgets .grid .ListGridRecord ;
1724import com .smartgwt .client .widgets .layout .HLayout ;
25+ import com .smartgwt .client .widgets .layout .SectionStack ;
26+ import com .smartgwt .client .widgets .layout .SectionStackSection ;
27+ import com .smartgwt .client .widgets .menu .Menu ;
28+ import com .smartgwt .client .widgets .menu .MenuItem ;
1829
1930/**
2031 * Shows model's standard properties and read-only data
@@ -38,6 +49,10 @@ public class ModelProperties extends ModelDetailsTab {
3849
3950 private DocumentSelector documentSelector ;
4051
52+ private ListGrid layers ;
53+
54+ private SectionStack layersStack = new SectionStack ();
55+
4156 public ModelProperties (GUIModel model , final ChangedHandler changedHandler ) {
4257 super (model , changedHandler );
4358 setWidth100 ();
@@ -94,13 +109,21 @@ private void refresh() {
94109
95110 TextItem features = ItemFactory .newTextItem ("features" , model .getFeatures ());
96111 features .addChangedHandler (changedHandler );
112+ features .setColSpan (4 );
113+ features .setWidth (400 );
97114 features .setHint (I18N .message ("valuescommaseparated" ));
115+ features .setShowHintInField (true );
116+ features .setValue (model .getFeatures ());
98117 features .setVisibleWhen (new AdvancedCriteria (TYPE , OperatorId .EQUALS , "neural" ));
99118 features .setRequiredWhen (new AdvancedCriteria (TYPE , OperatorId .EQUALS , "neural" ));
100119
101120 TextItem categories = ItemFactory .newTextItem ("categories" , model .getCategories ());
102121 categories .addChangedHandler (changedHandler );
122+ categories .setColSpan (4 );
123+ categories .setValue (model .getCategories ());
124+ categories .setWidth (400 );
103125 categories .setHint (I18N .message ("valuescommaseparated" ));
126+ categories .setShowHintInField (true );
104127 categories .setVisibleWhen (new AdvancedCriteria (TYPE , OperatorId .EQUALS , "neural" ));
105128 categories .setRequiredWhen (new AdvancedCriteria (TYPE , OperatorId .EQUALS , "neural" ));
106129
@@ -115,6 +138,8 @@ private void refresh() {
115138
116139 container .setMembersMargin (3 );
117140 container .addMember (form );
141+
142+ prepareLayers ();
118143 }
119144
120145 private SelectItem lossSeletor () {
@@ -127,6 +152,8 @@ private SelectItem lossSeletor() {
127152 map .put ("NEGATIVELOGLIKELIHOOD" , "NEGATIVELOGLIKELIHOOD" );
128153 item .setValueMap (map );
129154
155+ item .setValue (model .getLoss ());
156+
130157 item .setVisibleWhen (new AdvancedCriteria (TYPE , OperatorId .EQUALS , "neural" ));
131158 item .setRequiredWhen (new AdvancedCriteria (TYPE , OperatorId .EQUALS , "neural" ));
132159
@@ -146,6 +173,8 @@ private SelectItem weightInitSeletor() {
146173 map .put ("XAVIER" , "XAVIER" );
147174 item .setValueMap (map );
148175
176+ item .setValue (model .getWeightInit ());
177+
149178 item .setVisibleWhen (new AdvancedCriteria (TYPE , OperatorId .EQUALS , "neural" ));
150179 item .setRequiredWhen (new AdvancedCriteria (TYPE , OperatorId .EQUALS , "neural" ));
151180 return item ;
@@ -177,6 +206,8 @@ private SelectItem activationSeletor() {
177206 map .put ("MISH" , "MISH" );
178207 item .setValueMap (map );
179208
209+ item .setValue (model .getActivation ());
210+
180211 item .setVisibleWhen (new AdvancedCriteria (TYPE , OperatorId .EQUALS , "neural" ));
181212 item .setRequiredWhen (new AdvancedCriteria (TYPE , OperatorId .EQUALS , "neural" ));
182213 return item ;
@@ -192,9 +223,95 @@ boolean validate() {
192223 model .setCategories (form .getValueAsString ("categories" ));
193224 model .setActivation (form .getValueAsString ("activation" ));
194225 model .setWeightInit (form .getValueAsString ("weightInit" ));
226+ model .setLoss (form .getValueAsString ("loss" ));
195227 }
196228 return !form .hasErrors ();
197229 }
230+
231+ private void prepareLayers () {
232+ layers = new ListGrid ();
233+ layers .setEmptyMessage (I18N .message ("notitemstoshow" ));
234+ layers .setWidth100 ();
235+ layers .setHeight100 ();
236+ layers .setEmptyMessage (I18N .message ("norecords" ));
237+ layers .setCanSort (false );
238+ layers .setCanFreezeFields (false );
239+ layers .setCanGroupBy (false );
240+ layers .setLeaveScrollbarGap (false );
241+ layers .setShowHeader (true );
242+ layers .setSelectionType (SelectionStyle .MULTIPLE );
243+ layers .setCanEdit (false );
244+ layers .setShowRowNumbers (true );
245+ layers .setCanReorderRecords (true );
246+ layers .setAutoFetchData (true );
247+ layers .setShowRecordComponents (true );
248+ layers .setShowRecordComponentsByCell (true );
249+ layers .addDropCompleteHandler (dropCompleted -> changedHandler .onChanged (null ));
250+ layers .addCellContextClickHandler (event -> {
251+ showContextMenu ();
252+ event .cancel ();
253+ });
254+
255+
256+ ListGridField name = new ListGridField (NAME , I18N .message (NAME ));
257+ name .setCanEdit (true );
258+ name .setCanSort (false );
259+ name .setAutoFitWidth (true );
260+ name .setAutoFitWidthApproach (AutoFitWidthApproach .BOTH );
261+
262+ ListGridField outputNodes = new ListGridField ("outputnodes" , I18N .message ("outputnodes" ));
263+ outputNodes .setCanEdit (true );
264+ outputNodes .setCanSort (false );
265+ outputNodes .setAutoFitWidth (true );
266+ outputNodes .setAutoFitWidthApproach (AutoFitWidthApproach .BOTH );
267+
268+ ListGridField activation = new ListGridField ("activation" , I18N .message ("activationfunction" ));
269+ activation .setCanEdit (true );
270+ activation .setCanSort (false );
271+ activation .setAutoFitWidth (true );
272+ activation .setAutoFitWidthApproach (AutoFitWidthApproach .BOTH );
273+
274+ layers .setFields (name , outputNodes , activation );
275+
276+ // Initialize the layers grid
277+ for (GUINeuralNetworkLayer layer : model .getLayers ()) {
278+ ListGridRecord rec = new ListGridRecord ();
279+ rec .setAttribute (NAME , layer .getName ());
280+ rec .setAttribute ("outputnodes" , layer .getOutputNodes ());
281+ rec .setAttribute ("activation" , layer .getActivation ());
282+ layers .addData (rec );
283+ }
284+
285+ DynamicForm buttonsForm = new DynamicForm ();
286+ // buttonsForm.setItems(addSampler);
287+
288+ layersStack .setHeight100 ();
289+ layersStack .setVisible ("neural" .equals (model .getType ()));
290+
291+ SectionStackSection section = new SectionStackSection ("<b>" + I18N .message ("layers" ) + "</b>" );
292+ section .setCanCollapse (false );
293+ section .setExpanded (true );
294+ section .setItems (layers , buttonsForm );
295+
296+ layersStack .setSections (section );
297+ layersStack .draw ();
298+
299+ container .addMember (layersStack );
300+ }
301+
302+ private void showContextMenu () {
303+ Menu contextMenu = new Menu ();
304+ MenuItem delete = new MenuItem ();
305+ delete .setTitle (I18N .message ("ddelete" ));
306+ delete .addClickHandler (click -> {
307+ layers .removeSelectedData ();
308+ changedHandler .onChanged (null );
309+ });
310+
311+ contextMenu .setItems (delete );
312+ contextMenu .showContextMenu ();
313+ }
314+
198315
199316 @ Override
200317 public boolean equals (Object other ) {
0 commit comments