ImageImportPage class

Пакет: com.hypixel.hytale.builtin.buildertools.imageimport

Файл: com/hypixel/hytale/builtin/buildertools/imageimport/ImageImportPage.java

extends: InteractiveCustomUIPage<ImageImportPage.PageData>

Поля (117)

МодификаторыТипИмя
public static final BuilderCodec<ImageImportPage.PageData> CODEC
final int DEFAULT_MAX_SIZE
VERTICAL_XY, VERTICAL_XZ, HORIZONTAL_XZ
static final String KEY_BROWSE
static final String KEY_BROWSER_CANCEL
static final String KEY_BROWSER_SELECT
static final String KEY_IMAGE_PATH
static final String KEY_IMPORT
static final String KEY_MAX_SIZE
static final String KEY_ORIENTATION
static final String KEY_ORIGIN
BOTTOM_FRONT_LEFT, BOTTOM_CENTER, CENTER, TOP_CENTER
break
break
break
break
break
break
break
break
break
private Boolean browse
private Boolean browserCancel
private Boolean browserSelect
private Boolean doImport
private String file
private String imagePath
private Integer maxSize
private String orientation
private String origin
return
return
private String searchQuery
private String searchResult
UICommandBuilder var1
ImageImportPage.Origin var10
BufferedImage var11
var11
int var12
var12
int var13
var13
float var14
var14
BlockColorIndex var15
int var16
var16
var16
var16
var16
int var17
var17
var17
var17
var17
int var18
var18
var18
var18
var18
int var19
var19
var19
var19
FileBrowserConfig var2
String var2
UIEventBuilder var2
int var20
var20
var20
int var21
var21
var21
var21
BlockSelection var22
int var23
float var24
int var27
int var28
int var29
String var3
Path var3
int var30
int var31
int var32
int var33
int var34
int var35
var35
var35
var35
var35
int var36
var36
var36
var36
var36
int var37
var37
var37
var37
var37
boolean var4
var4
var4
var4
var4
Path var4
boolean var4
List var5
Path var5
Player var5
List var6
PlayerRef var6
String var7
int var8
ImageImportPage.Orientation var9

Методы (34)

МодификаторыВозвратСигнатура
Orientation Orientation()
Origin Origin()
public PageDatapublic PageData()
private void buildBrowserPagevoid buildBrowserPage(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2)
for for(int var25 = 0; var25 < var13; var25++)
for for(int var26 = 0; var26 < var12; var26++)
private boolean handleBrowserEventboolean handleBrowserEvent(@Nonnull ImageImportPage.PageData var1)
public void handleDataEventvoid handleDataEvent(@Nonnull Ref<EntityStore> var1, @Nonnull Store<EntityStore> var2, @Nonnull ImageImportPage.PageData var3)
if if(this.showBrowser)
if if(this.statusMessage != null)
if if(var3.browse != null && var3.browse)
if if(var3.imagePath != null)
if if(var3.maxSize != null)
if if(var3.orientation != null)
if if(var3.origin != null)
if if(var3.doImport != null && var3.doImport && !this.isProcessing)
if if(var4)
if if(var1.searchQuery != null)
if if(var1.file != null)
if if(var1.searchResult != null)
if if(var5 != null && var6 != null)
if if(var11 == null)
if if(var12 > var8 || var13 > var8)
if if(var30 >= 128)
if if(var34 > 0)
private void performImportvoid performImport(@Nonnull Ref<EntityStore> var1, @Nonnull Store<EntityStore> var2)
private void rebuildBrowservoid rebuildBrowser()
private void setErrorvoid setError(@Nonnull Message var1)
private void setStatusvoid setStatus(@Nonnull Message var1)
abstract super super(var1, CustomPageLifetime.CanDismiss, ImageImportPage.PageData.CODEC)
switch switch(var9)
switch switch(var10)
switch switch(var9)
private void updateStatusvoid updateStatus(@Nonnull UICommandBuilder var1)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.buildertools.imageimport;

class="kw">import com.hypixel.hytale.builtin.buildertools.BlockColorIndex;
class="kw">import com.hypixel.hytale.builtin.buildertools.BuilderToolsPlugin;
class="kw">import com.hypixel.hytale.builtin.buildertools.utils.PasteToolUtil;
class="kw">import com.hypixel.hytale.codec.Codec;
class="kw">import com.hypixel.hytale.codec.KeyedCodec;
class="kw">import com.hypixel.hytale.codec.builder.BuilderCodec;
class="kw">import com.hypixel.hytale.common.util.StringUtil;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.protocol.packets.interface_.CustomPageLifetime;
class="kw">import com.hypixel.hytale.protocol.packets.interface_.CustomUIEventBindingType;
class="kw">import com.hypixel.hytale.protocol.packets.interface_.Page;
class="kw">import com.hypixel.hytale.server.core.Constants;
class="kw">import com.hypixel.hytale.server.core.Message;
class="kw">import com.hypixel.hytale.server.core.asset.AssetModule;
class="kw">import com.hypixel.hytale.server.core.entity.entities.Player;
class="kw">import com.hypixel.hytale.server.core.entity.entities.player.pages.InteractiveCustomUIPage;
class="kw">import com.hypixel.hytale.server.core.modules.singleplayer.SingleplayerModule;
class="kw">import com.hypixel.hytale.server.core.prefab.selection.standard.BlockSelection;
class="kw">import com.hypixel.hytale.server.core.ui.DropdownEntryInfo;
class="kw">import com.hypixel.hytale.server.core.ui.LocalizableString;
class="kw">import com.hypixel.hytale.server.core.ui.browser.FileBrowserConfig;
class="kw">import com.hypixel.hytale.server.core.ui.browser.FileBrowserEventData;
class="kw">import com.hypixel.hytale.server.core.ui.browser.ServerFileBrowser;
class="kw">import com.hypixel.hytale.server.core.ui.builder.EventData;
class="kw">import com.hypixel.hytale.server.core.ui.builder.UICommandBuilder;
class="kw">import com.hypixel.hytale.server.core.ui.builder.UIEventBuilder;
class="kw">import com.hypixel.hytale.server.core.universe.PlayerRef;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import java.awt.image.BufferedImage;
class="kw">import java.nio.file.Files;
class="kw">import java.nio.file.Path;
class="kw">import java.nio.file.Paths;
class="kw">import java.util.ArrayList;
class="kw">import java.util.List;
class="kw">import java.util.Locale;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import javax.imageio.ImageIO;
class="kw">import org.joml.Vector3i;

class="kw">public class ImageImportPage class="kw">extends InteractiveCustomUIPage<ImageImportPage.PageData> {
   class="kw">private class="kw">static class="kw">final int DEFAULT_MAX_SIZE = 128;
   class="kw">private class="kw">static class="kw">final int MIN_SIZE = 1;
   class="kw">private class="kw">static class="kw">final int MAX_SIZE = 512;
   class="kw">private class="kw">static class="kw">final String ASSET_PACK_SUB_PATH = "Server/Imports/Images";
   @Nonnull
   class="kw">private String imagePath = "";
   class="kw">private int maxDimension = 128;
   @Nonnull
   class="kw">private String orientationStr = "wall_xy";
   @Nonnull
   class="kw">private ImageImportPage.Orientation orientation = ImageImportPage.Orientation.VERTICAL_XY;
   @Nonnull
   class="kw">private String originStr = "bottom_center";
   @Nonnull
   class="kw">private ImageImportPage.Origin origin = ImageImportPage.Origin.BOTTOM_CENTER;
   @Nullable
   class="kw">private Message statusMessage = null;
   class="kw">private boolean isError = false;
   class="kw">private boolean isProcessing = false;
   class="kw">private boolean showBrowser = false;
   @Nonnull
   class="kw">private class="kw">final ServerFileBrowser browser;

   class="kw">public ImageImportPage(@Nonnull PlayerRef var1) {
      super(var1, CustomPageLifetime.CanDismiss, ImageImportPage.PageData.CODEC);
      FileBrowserConfig var2 = FileBrowserConfig.builder()
         .listElementId("#BrowserPage #FileList")
         .searchInputId("#BrowserPage #SearchInput")
         .currentPathId("#BrowserPage #CurrentPath")
         .allowedExtensions(".png", ".jpg", ".jpeg", ".gif", ".bmp")
         .enableRootSelector(false)
         .enableSearch(true)
         .enableDirectoryNav(true)
         .maxResults(50)
         .assetPackMode(true, "Server/Imports/Images")
         .build();
      this.browser = new ServerFileBrowser(var2);
   }

   @Override
   class="kw">public void build(@Nonnull Ref<EntityStore> var1, @Nonnull UICommandBuilder var2, @Nonnull UIEventBuilder var3, @Nonnull Store<EntityStore> var4) {
      var2.append("Pages/ImageImportPage.ui");
      var2.set("#ImagePath #Input.Value", this.imagePath);
      var2.set("#MaxSizeInput #Input.Value", this.maxDimension);
      List var5 = new ArrayList<>();
      var5.add(new DropdownEntryInfo(LocalizableString.fromMessageId("server.customUI.imageImport.orientation.wall_xy"), "wall_xy"));
      var5.add(new DropdownEntryInfo(LocalizableString.fromMessageId("server.customUI.imageImport.orientation.wall_xz"), "wall_xz"));
      var5.add(new DropdownEntryInfo(LocalizableString.fromMessageId("server.customUI.imageImport.orientation.floor"), "floor"));
      var2.set("#OrientationInput #Input.Entries", var5);
      var2.set("#OrientationInput #Input.Value", this.orientationStr);
      List var6 = new ArrayList<>();
      var6.add(new DropdownEntryInfo(LocalizableString.fromMessageId("server.customUI.origin.bottom_front_left"), "bottom_front_left"));
      var6.add(new DropdownEntryInfo(LocalizableString.fromMessageId("server.customUI.origin.bottom_center"), "bottom_center"));
      var6.add(new DropdownEntryInfo(LocalizableString.fromMessageId("server.customUI.origin.center"), "center"));
      var6.add(new DropdownEntryInfo(LocalizableString.fromMessageId("server.customUI.origin.top_center"), "top_center"));
      var2.set("#OriginInput #Input.Entries", var6);
      var2.set("#OriginInput #Input.Value", this.originStr);
      this.updateStatus(var2);
      var3.addEventBinding(CustomUIEventBindingType.ValueChanged, "#ImagePath #Input", EventData.of("@ImagePath", "#ImagePath #Input.Value"), false);
      var3.addEventBinding(CustomUIEventBindingType.ValueChanged, "#MaxSizeInput #Input", EventData.of("@MaxSize", "#MaxSizeInput #Input.Value"), false);
      var3.addEventBinding(
         CustomUIEventBindingType.ValueChanged, "#OrientationInput #Input", EventData.of("@Orientation", "#OrientationInput #Input.Value"), false
      );
      var3.addEventBinding(CustomUIEventBindingType.ValueChanged, "#OriginInput #Input", EventData.of("@Origin", "#OriginInput #Input.Value"), false);
      var3.addEventBinding(CustomUIEventBindingType.Activating, "#ImportButton", EventData.of("Import", "true"));
      var3.addEventBinding(CustomUIEventBindingType.Activating, "#ImagePath #BrowseButton", EventData.of("Browse", "true"));
      var2.set("#FormContainer.Visible", !this.showBrowser);
      var2.set("#BrowserPage.Visible", this.showBrowser);
      if (this.showBrowser) {
         this.buildBrowserPage(var2, var3);
      }
   }

   class="kw">private void buildBrowserPage(@Nonnull UICommandBuilder var1, @Nonnull UIEventBuilder var2) {
      this.browser.buildSearchInput(var1, var2);
      this.browser.buildCurrentPath(var1);
      this.browser.buildFileList(var1, var2);
      var2.addEventBinding(CustomUIEventBindingType.Activating, "#BrowserPage #SelectButton", EventData.of("BrowserSelect", "true"));
      var2.addEventBinding(CustomUIEventBindingType.Activating, "#BrowserPage #CancelButton", EventData.of("BrowserCancel", "true"));
   }

   class="kw">private void updateStatus(@Nonnull UICommandBuilder var1) {
      if (this.statusMessage != null) {
         var1.set("#StatusText.Text", this.statusMessage);
         var1.set("#StatusText.Visible", true);
         var1.set("#StatusText.Style.TextColor", this.isError ? "#e74c3c" : "#cfd8e3");
      } else {
         var1.set("#StatusText.Visible", false);
      }
   }

   class="kw">private void setError(@Nonnull Message var1) {
      this.statusMessage = var1;
      this.isError = true;
      this.isProcessing = false;
      this.rebuild();
   }

   class="kw">private void setStatus(@Nonnull Message var1) {
      this.statusMessage = var1;
      this.isError = false;
      this.rebuild();
   }

   class="kw">public void handleDataEvent(@Nonnull Ref<EntityStore> var1, @Nonnull Store<EntityStore> var2, @Nonnull ImageImportPage.PageData var3) {
      if (var3.browse != null && var3.browse) {
         this.showBrowser = true;
         this.rebuild();
      } else if (var3.browserCancel != null && var3.browserCancel) {
         this.showBrowser = false;
         this.rebuild();
      } else if (var3.browserSelect != null && var3.browserSelect) {
         this.showBrowser = false;
         this.rebuild();
      } else if (!this.showBrowser || !this.handleBrowserEvent(var3)) {
         boolean var4 = false;
         if (var3.imagePath != null) {
            this.imagePath = StringUtil.stripQuotes(var3.imagePath.trim());
            this.statusMessage = null;
            var4 = true;
         }

         if (var3.maxSize != null) {
            this.maxDimension = Math.max(1, Math.min(512, var3.maxSize));
            var4 = true;
         }

         if (var3.orientation != null) {
            this.orientationStr = var3.orientation.trim().toLowerCase(Locale.ROOT);

            this.orientation = class="kw">switch (this.orientationStr) {
               case "wall_xz", "xz", "vertical_xz" -> ImageImportPage.Orientation.VERTICAL_XZ;
               case "floor", "horizontal", "horizontal_xz" -> ImageImportPage.Orientation.HORIZONTAL_XZ;
               class="kw">default -> ImageImportPage.Orientation.VERTICAL_XY;
            };
            var4 = true;
         }

         if (var3.origin != null) {
            this.originStr = var3.origin.trim().toLowerCase(Locale.ROOT);

            this.origin = class="kw">switch (this.originStr) {
               case "bottom_front_left" -> ImageImportPage.Origin.BOTTOM_FRONT_LEFT;
               case "center" -> ImageImportPage.Origin.CENTER;
               case "top_center" -> ImageImportPage.Origin.TOP_CENTER;
               class="kw">default -> ImageImportPage.Origin.BOTTOM_CENTER;
            };
            var4 = true;
         }

         if (var3.doImport != null && var3.doImport && !this.isProcessing) {
            this.performImport(var1, var2);
         } else {
            if (var4) {
               this.sendUpdate();
            }
         }
      }
   }

   class="kw">private boolean handleBrowserEvent(@Nonnull ImageImportPage.PageData var1) {
      if (var1.searchQuery != null) {
         this.browser.setSearchQuery(var1.searchQuery.trim().toLowerCase(Locale.ROOT));
         this.rebuildBrowser();
         class="kw">return true;
      }

      if (var1.file != null) {
         String var2 = var1.file;
         if ("..".equals(var2)) {
            this.browser.navigateUp();
            this.rebuildBrowser();
            class="kw">return true;
         }

         if (this.browser.handleEvent(FileBrowserEventData.file(var2))) {
            this.rebuildBrowser();
            class="kw">return true;
         }

         String var3 = this.browser.getAssetPackCurrentPath().isEmpty() ? var2 : this.browser.getAssetPackCurrentPath() + "/" + var2;
         Path var4 = this.browser.resolveAssetPackPath(var3);
         if (var4 != null && Files.isRegularFile(var4)) {
            this.imagePath = var4.toString();
            this.showBrowser = false;
            this.rebuild();
            class="kw">return true;
         }
      }

      if (var1.searchResult != null) {
         Path var5 = this.browser.resolveAssetPackPath(var1.searchResult);
         if (var5 != null && Files.isRegularFile(var5)) {
            this.imagePath = var5.toString();
            this.showBrowser = false;
            this.rebuild();
            class="kw">return true;
         }
      }

      class="kw">return false;
   }

   class="kw">private void rebuildBrowser() {
      UICommandBuilder var1 = new UICommandBuilder();
      UIEventBuilder var2 = new UIEventBuilder();
      this.browser.buildFileList(var1, var2);
      this.browser.buildCurrentPath(var1);
      this.sendUpdate(var1, var2, false);
   }

   class="kw">private void performImport(@Nonnull Ref<EntityStore> var1, @Nonnull Store<EntityStore> var2) {
      if (this.imagePath.isEmpty()) {
         this.setError(Message.translation("server.builderTools.imageImport.emptyPath"));
      } else {
         Path var3 = Paths.get(this.imagePath);
         boolean var4 = Constants.SINGLEPLAYER && SingleplayerModule.isOwner(this.playerRef);
         if (!var4 && !AssetModule.get().isWithinPackSubDir(var3, "Server/Imports/Images")) {
            this.setError(Message.translation("server.builderTools.imageImport.notInImportsDir"));
         } else if (!Files.exists(var3)) {
            this.setError(Message.translation("server.builderTools.imageImport.fileNotFound").param("path", this.imagePath));
         } else {
            this.isProcessing = true;
            this.setStatus(Message.translation("server.builderTools.imageImport.processing"));
            Player var5 = var2.getComponent(var1, Player.getComponentType());
            PlayerRef var6 = var2.getComponent(var1, PlayerRef.getComponentType());
            if (var5 != null && var6 != null) {
               String var7 = this.imagePath;
               int var8 = this.maxDimension;
               ImageImportPage.Orientation var9 = this.orientation;
               ImageImportPage.Origin var10 = this.origin;
               BuilderToolsPlugin.addToQueue(
                  var5,
                  var6,
                  (var8x, var9x, var10x) -> {
                     try {
                        BufferedImage var11 = null;

                        try {
                           var11 = ImageIO.read(Paths.get(var7).toFile());
                        } catch (Exception var38) {
                        }

                        if (var11 == null) {
                           this.setError(Message.translation("server.builderTools.imageImport.unreadableImage"));
                           class="kw">return;
                        }

                        int var12 = var11.getWidth();
                        int var13 = var11.getHeight();
                        float var14 = 1.0F;
                        if (var12 > var8 || var13 > var8) {
                           var14 = (float)var8 / Math.max(var12, var13);
                           var12 = Math.round(var12 * var14);
                           var13 = Math.round(var13 * var14);
                        }

                        BlockColorIndex var15 = BuilderToolsPlugin.get().getBlockColorIndex();
                        if (var15.isEmpty()) {
                           this.setError(Message.translation("server.builderTools.imageImport.colorIndexEmpty"));
                           class="kw">return;
                        }

                        int var16;
                        int var17;
                        int var18;
                        class="kw">switch (var9) {
                           case VERTICAL_XY:
                              var16 = var12;
                              var17 = var13;
                              var18 = 1;
                              break;
                           case VERTICAL_XZ:
                              var16 = var12;
                              var17 = 1;
                              var18 = var13;
                              break;
                           case HORIZONTAL_XZ:
                              var16 = var12;
                              var17 = 1;
                              var18 = var13;
                              break;
                           class="kw">default:
                              var16 = var12;
                              var17 = var13;
                              var18 = 1;
                        }

                        int var19 = 0;
                        int var20 = 0;
                        int var21 = 0;
                        class="kw">switch (var10) {
                           case BOTTOM_FRONT_LEFT:
                           class="kw">default:
                              break;
                           case BOTTOM_CENTER:
                              var19 = -var16 / 2;
                              var21 = -var18 / 2;
                              break;
                           case CENTER:
                              var19 = -var16 / 2;
                              var20 = -var17 / 2;
                              var21 = -var18 / 2;
                              break;
                           case TOP_CENTER:
                              var19 = -var16 / 2;
                              var20 = -var17;
                              var21 = -var18 / 2;
                        }

                        BlockSelection var22 = new BlockSelection(var12 * var13, 0);
                        var22.setPosition(0, 0, 0);
                        int var23 = 0;
                        float var24 = var14;

                        for (int var25 = 0; var25 < var13; var25++) {
                           for (int var26 = 0; var26 < var12; var26++) {
                              int var27 = Math.min((int)(var26 / var24), var11.getWidth() - 1);
                              int var28 = Math.min((int)(var25 / var24), var11.getHeight() - 1);
                              int var29 = var11.getRGB(var27, var28);
                              int var30 = var29 >> 24 & 0xFF;
                              if (var30 >= 128) {
                                 int var31 = var29 >> 16 & 0xFF;
                                 int var32 = var29 >> 8 & 0xFF;
                                 int var33 = var29 & 0xFF;
                                 int var34 = var15.findClosestBlock(var31, var32, var33);
                                 if (var34 > 0) {
                                    int var35;
                                    int var36;
                                    int var37;
                                    class="kw">switch (var9) {
                                       case VERTICAL_XY:
                                          var35 = var26;
                                          var36 = var13 - 1 - var25;
                                          var37 = 0;
                                          break;
                                       case VERTICAL_XZ:
                                          var35 = var26;
                                          var36 = 0;
                                          var37 = var13 - 1 - var25;
                                          break;
                                       case HORIZONTAL_XZ:
                                          var35 = var26;
                                          var36 = 0;
                                          var37 = var25;
                                          break;
                                       class="kw">default:
                                          var35 = var26;
                                          var36 = var13 - 1 - var25;
                                          var37 = 0;
                                    }

                                    var22.addBlockAtLocalPos(var35 + var19, var36 + var20, var37 + var21, var34, 0, 0, 0);
                                    var23++;
                                 }
                              }
                           }
                        }

                        var22.setSelectionArea(new Vector3i(var19, var20, var21), new Vector3i(var16 - 1 + var19, var17 - 1 + var20, var18 - 1 + var21));
                        var9x.setSelection(var22);
                        var9x.sendSelectionToClient();
                        this.statusMessage = Message.translation("server.builderTools.imageImport.success")
                           .param("count", var23)
                           .param("width", var16)
                           .param("height", var17)
                           .param("depth", var18);
                        this.isProcessing = false;
                        var6.sendMessage(
                           Message.translation("server.builderTools.imageImport.success")
                              .param("count", var23)
                              .param("width", var16)
                              .param("height", var17)
                              .param("depth", var18)
                        );
                        var5.getPageManager().setPage(var8x, var2, Page.None);
                        PasteToolUtil.switchToPasteTool(var8x, var6, var10x);
                     } catch (Exception var39) {
                        ((HytaleLogger.Api)BuilderToolsPlugin.get().getLogger().at(Level.WARNING).withCause(var39)).log("Image class="kw">import error");
                        this.setError(Message.translation("server.builderTools.imageImport.error").param("message", var39.getMessage()));
                     }
                  }
               );
            } else {
               this.setError(Message.translation("server.builderTools.imageImport.playerNotFound"));
            }
         }
      }
   }

   class="kw">public enum Orientation {
      VERTICAL_XY,
      VERTICAL_XZ,
      HORIZONTAL_XZ;

      Orientation() {
      }
   }

   class="kw">public enum Origin {
      BOTTOM_FRONT_LEFT,
      BOTTOM_CENTER,
      CENTER,
      TOP_CENTER;

      Origin() {
      }
   }

   class="kw">public class="kw">static class PageData {
      class="kw">static class="kw">final String KEY_IMAGE_PATH = "@ImagePath";
      class="kw">static class="kw">final String KEY_MAX_SIZE = "@MaxSize";
      class="kw">static class="kw">final String KEY_ORIENTATION = "@Orientation";
      class="kw">static class="kw">final String KEY_ORIGIN = "@Origin";
      class="kw">static class="kw">final String KEY_IMPORT = "Import";
      class="kw">static class="kw">final String KEY_BROWSE = "Browse";
      class="kw">static class="kw">final String KEY_BROWSER_SELECT = "BrowserSelect";
      class="kw">static class="kw">final String KEY_BROWSER_CANCEL = "BrowserCancel";
      class="kw">public class="kw">static class="kw">final BuilderCodec<ImageImportPage.PageData> CODEC = BuilderCodec.builder(ImageImportPage.PageData.class, ImageImportPage.PageData::new)
         .append(new KeyedCodec<>("@ImagePath", Codec.STRING), (var0, var1) -> var0.imagePath = var1, var0 -> var0.imagePath)
         .add()
         .append(new KeyedCodec<>("@MaxSize", Codec.INTEGER), (var0, var1) -> var0.maxSize = var1, var0 -> var0.maxSize)
         .add()
         .append(new KeyedCodec<>("@Orientation", Codec.STRING), (var0, var1) -> var0.orientation = var1, var0 -> var0.orientation)
         .add()
         .append(new KeyedCodec<>("@Origin", Codec.STRING), (var0, var1) -> var0.origin = var1, var0 -> var0.origin)
         .add()
         .append(
            new KeyedCodec<>("Import", Codec.STRING),
            (var0, var1) -> var0.doImport = "true".equalsIgnoreCase(var1),
            var0 -> var0.doImport != null && var0.doImport ? "true" : null
         )
         .add()
         .append(
            new KeyedCodec<>("Browse", Codec.STRING),
            (var0, var1) -> var0.browse = "true".equalsIgnoreCase(var1),
            var0 -> var0.browse != null && var0.browse ? "true" : null
         )
         .add()
         .append(
            new KeyedCodec<>("BrowserSelect", Codec.STRING),
            (var0, var1) -> var0.browserSelect = "true".equalsIgnoreCase(var1),
            var0 -> var0.browserSelect != null && var0.browserSelect ? "true" : null
         )
         .add()
         .append(
            new KeyedCodec<>("BrowserCancel", Codec.STRING),
            (var0, var1) -> var0.browserCancel = "true".equalsIgnoreCase(var1),
            var0 -> var0.browserCancel != null && var0.browserCancel ? "true" : null
         )
         .add()
         .append(new KeyedCodec<>("File", Codec.STRING), (var0, var1) -> var0.file = var1, var0 -> var0.file)
         .add()
         .append(new KeyedCodec<>("@SearchQuery", Codec.STRING), (var0, var1) -> var0.searchQuery = var1, var0 -> var0.searchQuery)
         .add()
         .append(new KeyedCodec<>("SearchResult", Codec.STRING), (var0, var1) -> var0.searchResult = var1, var0 -> var0.searchResult)
         .add()
         .build();
      @Nullable
      class="kw">private String imagePath;
      @Nullable
      class="kw">private Integer maxSize;
      @Nullable
      class="kw">private String orientation;
      @Nullable
      class="kw">private String origin;
      @Nullable
      class="kw">private Boolean doImport;
      @Nullable
      class="kw">private Boolean browse;
      @Nullable
      class="kw">private Boolean browserSelect;
      @Nullable
      class="kw">private Boolean browserCancel;
      @Nullable
      class="kw">private String file;
      @Nullable
      class="kw">private String searchQuery;
      @Nullable
      class="kw">private String searchResult;

      class="kw">public PageData() {
      }
   }
}