11package com .dengzii .plugin .template .ui ;
22
33import com .dengzii .plugin .template .Config ;
4+ import com .dengzii .plugin .template .CreateModuleAction ;
45import com .dengzii .plugin .template .model .Module ;
56import com .dengzii .plugin .template .utils .PopMenuUtils ;
7+ import com .intellij .openapi .fileChooser .FileChooser ;
8+ import com .intellij .openapi .fileChooser .FileChooserDescriptor ;
9+ import com .intellij .openapi .fileChooser .FileChooserDescriptorFactory ;
10+ import com .intellij .openapi .vfs .VirtualFile ;
611import com .intellij .ui .DocumentAdapter ;
712import com .intellij .ui .components .JBList ;
813import com .intellij .ui .components .JBTabbedPane ;
1318import java .awt .*;
1419import java .awt .event .MouseAdapter ;
1520import java .awt .event .MouseEvent ;
21+ import java .io .*;
1622import java .util .HashMap ;
1723import java .util .List ;
1824import java .util .Map ;
@@ -96,6 +102,10 @@ public void mouseClicked(MouseEvent e) {
96102 onCopyConfig ();
97103 return null ;
98104 });
105+ actionbar .onExport (() -> {
106+ onExportTemplate ();
107+ return null ;
108+ });
99109
100110 cbPlaceholder .addChangeListener (e -> {
101111 panelPreview .setReplacePlaceholder (cbPlaceholder .isSelected ());
@@ -105,7 +115,15 @@ public void mouseClicked(MouseEvent e) {
105115 listTemplate .addListSelectionListener (e -> {
106116 if (noSelectedConfig ()) return ;
107117 onConfigSelect (getSelectedConfigIndex ());
108-
118+ });
119+ listTemplate .addMouseListener (new MouseAdapter () {
120+ @ Override
121+ public void mouseClicked (MouseEvent e ) {
122+ super .mouseClicked (e );
123+ if (e .getButton () != MouseEvent .BUTTON3 ) {
124+ return ;
125+ }
126+ }
109127 });
110128 //noinspection unchecked
111129 listTemplate .setModel (templateListModel );
@@ -148,11 +166,13 @@ private void onAddConfig(MouseEvent e) {
148166 items .put ("Auc Pkg" , () -> addModuleTemplate (Module .Companion .getAucPkg ()));
149167 items .put ("Auc Export" , () -> addModuleTemplate (Module .Companion .getAucExport ()));
150168 items .put ("Android Mvp" , () -> addModuleTemplate (Module .Companion .getAndroidMvp ()));
169+ items .put ("=> Import From File" , this ::onImportTemplate );
151170 PopMenuUtils .INSTANCE .create (items ).show (actionbar , e .getX (), e .getY ());
152171 }
153172
154173 private void addModuleTemplate (Module module ) {
155174 configs .add (module );
175+ currentConfig = module ;
156176 templateListModel .addElement (module .getTemplateName ());
157177 listTemplate .doLayout ();
158178 listTemplate .setSelectedIndex (configs .indexOf (module ));
@@ -188,6 +208,70 @@ private void loadConfig() {
188208 }
189209 }
190210
211+ private void onExportTemplate () {
212+
213+ FileChooserDescriptor descriptor = FileChooserDescriptorFactory .createSingleFolderDescriptor ();
214+ descriptor .setTitle ("Save Template to File" );
215+ VirtualFile vf = FileChooser .chooseFile (descriptor ,
216+ CreateModuleAction .Companion .getProject (),
217+ null );
218+ if (vf != null && vf .isWritable ()) {
219+ String config = Config .INSTANCE .getGSON ().toJson (currentConfig );
220+ File file = new File (vf .getPath (), currentConfig .getTemplateName () + ".json" );
221+ OutputStreamWriter outputStream = null ;
222+ try {
223+ outputStream = new OutputStreamWriter (new FileOutputStream (file ));
224+ outputStream .write (config );
225+ } catch (IOException e ) {
226+ e .printStackTrace ();
227+ } finally {
228+ if (outputStream != null ) {
229+ try {
230+ outputStream .flush ();
231+ outputStream .close ();
232+ } catch (IOException e ) {
233+ e .printStackTrace ();
234+ }
235+ }
236+ }
237+ }
238+ }
239+
240+ private void onImportTemplate () {
241+
242+ FileChooserDescriptor descriptor = FileChooserDescriptorFactory .createSingleFileDescriptor ("json" );
243+ descriptor .setTitle ("Import Template From File" );
244+ VirtualFile vf = FileChooser .chooseFile (descriptor ,
245+ CreateModuleAction .Companion .getProject (),
246+ null );
247+ if (vf != null && vf .exists ()) {
248+ File file = new File (vf .getPath ());
249+ BufferedInputStream inputStream = null ;
250+ try {
251+ inputStream = new BufferedInputStream (new FileInputStream (file ));
252+ byte [] bytes = new byte [1024 ];
253+ int len = 0 ;
254+ StringBuilder stringBuilder = new StringBuilder ();
255+ while ((len = inputStream .read (bytes )) > 0 ) {
256+ stringBuilder .append (new String (bytes , 0 , len ));
257+ }
258+ Module template = Config .INSTANCE .getGSON ().fromJson (stringBuilder .toString (), Module .class );
259+ template .initTemplate (template .getTemplate ());
260+ addModuleTemplate (template );
261+ } catch (IOException e ) {
262+ e .printStackTrace ();
263+ } finally {
264+ if (inputStream != null ) {
265+ try {
266+ inputStream .close ();
267+ } catch (IOException e ) {
268+ e .printStackTrace ();
269+ }
270+ }
271+ }
272+ }
273+ }
274+
191275 private void onConfigSelect (int index ) {
192276 if (currentConfig == configs .get (index )) {
193277 return ;
0 commit comments