소스 검색

reorganize source codes under package com.crystaldecisions

sunyj 8 년 전
부모
커밋
3c5c4533d9

+ 274 - 0
crystal-replace-view/src/main/java/com/crystaldecisions/client/helper/SecurityContext.java

@@ -0,0 +1,274 @@
+package com.crystaldecisions.client.helper;
+
+/**
+ * @author sunyj
+ * @since 2017/12/27 20:07
+ */
+
+import com.crystaldecisions.sdk.occa.report.lib.IClone;
+import com.crystaldecisions.xml.serialization.IXMLSerializable;
+import com.crystaldecisions.xml.serialization.XMLConverter;
+import com.crystaldecisions.xml.serialization.XMLSerializationContext;
+import com.crystaldecisions.xml.serialization.XMLWriter;
+import org.xml.sax.Attributes;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Properties;
+
+public class SecurityContext implements IXMLSerializable, IClone, ISecurityContext {
+    private int clientVersion = 0;
+    private String token = null;
+    private String userName = null;
+    private String serverName = null;
+    private String password = null;
+    private int userRights = 2147483647;
+    private Locale locale = null;
+    private String authentication = null;
+    private ArrayList userGroups = new ArrayList();
+    private String rptInfoObjectTitle = "";
+
+    public SecurityContext() {
+    }
+
+    public void addUserGroup(int userGroup) {
+        this.userGroups.add(new Integer(userGroup));
+    }
+
+    public Object clone(boolean var1) {
+        SecurityContext var2 = new SecurityContext();
+        this.copyTo(var2, var1);
+        return var2;
+    }
+
+    public void copyTo(Object var1, boolean var2) {
+        if (var1 == null) {
+            throw new NullPointerException();
+        } else if (!(var1 instanceof ISecurityContext)) {
+            throw new ClassCastException();
+        } else {
+            ISecurityContext var3 = (ISecurityContext)var1;
+            var3.setAuthentication(this.authentication);
+            var3.setRptInfoObjectTitle(this.rptInfoObjectTitle);
+            var3.setPassword(this.password);
+            var3.setServerName(this.serverName);
+            var3.setToken(this.token);
+            var3.setUserName(this.userName);
+            if (this.locale != null && var2) {
+                var3.setLocale((Locale)((Locale)this.getLocale().clone()));
+            } else {
+                var3.setLocale(this.locale);
+            }
+
+            for(int var4 = 0; var4 < this.userGroups.size(); ++var4) {
+                var3.addUserGroup(((Integer)this.userGroups.get(var4)).intValue());
+            }
+
+            var3.setClientVersion(this.clientVersion);
+            var3.setUserRights(this.userRights);
+        }
+    }
+
+    public Object createMember(String var1, Attributes var2, XMLSerializationContext var3, Map var4, boolean[] var5) {
+        return null;
+    }
+
+    public void endElement(String var1, Map var2) {
+    }
+
+    public String getAuthentication() {
+        return this.authentication;
+    }
+
+    public String getRptInfoObjectTitle() {
+        return this.rptInfoObjectTitle;
+    }
+
+    public int getClientVersion() {
+        return this.clientVersion;
+    }
+
+    public Locale getLocale() {
+        return this.locale;
+    }
+
+    public String getPassword() {
+        return this.password;
+    }
+
+    public String getServerName() {
+        return this.serverName;
+    }
+
+    public String getToken() {
+        return this.token;
+    }
+
+    public int getUserGroup(int var1) {
+        return ((Integer)this.userGroups.get(var1)).intValue();
+    }
+
+    public int getUserGroupCount() {
+        return this.userGroups.size();
+    }
+
+    public String getUserName() {
+        return this.userName;
+    }
+
+    public int getUserRights() {
+        return this.userRights;
+    }
+
+    public boolean hasContent(Object var1) {
+        if (var1 == null) {
+            return false;
+        } else if (!(var1 instanceof ISecurityContext)) {
+            return false;
+        } else {
+            ISecurityContext var2 = (ISecurityContext)var1;
+            if (this.userRights != var2.getUserRights()) {
+                return false;
+            } else if (this.clientVersion != var2.getClientVersion()) {
+                return false;
+            } else if (!CloneUtil.equalStrings(this.authentication, var2.getAuthentication())) {
+                return false;
+            } else if (!CloneUtil.equalObjects(this.locale, var2.getLocale())) {
+                return false;
+            } else if (!CloneUtil.equalStrings(this.rptInfoObjectTitle, var2.getRptInfoObjectTitle())) {
+                return false;
+            } else if (!CloneUtil.equalStrings(this.userName, var2.getUserName())) {
+                return false;
+            } else if (!CloneUtil.equalStrings(this.password, var2.getPassword())) {
+                return false;
+            } else if (!CloneUtil.equalStrings(this.token, var2.getToken())) {
+                return false;
+            } else {
+                int var3 = var2.getUserGroupCount();
+                if (this.userGroups.size() < var3) {
+                    return false;
+                } else {
+                    for(int var4 = 0; var4 < var3; ++var4) {
+                        if (((Integer)this.userGroups.get(var4)).intValue() != var2.getUserGroup(var4)) {
+                            return false;
+                        }
+                    }
+
+                    return true;
+                }
+            }
+        }
+    }
+
+    public void readElement(String var1, String var2, Attributes var3, Map var4) {
+        if (var1.equals("UserGroupId")) {
+            int var5 = XMLConverter.getInt(var2);
+            this.userGroups.add(new Integer(var5));
+        } else if (var1.equals("Authentication")) {
+            this.authentication = var2;
+        } else if (var1.equals("RptInfoObjectTitle")) {
+            this.rptInfoObjectTitle = var2;
+        } else if (var1.equals("ServerName")) {
+            this.serverName = var2;
+        } else if (var1.equals("UserName")) {
+            this.userName = var2;
+        } else if (var1.equals("Password")) {
+            this.password = PasswordEncryptHelper.decryptPassword(var2);
+        } else if (var1.equals("Token")) {
+            this.token = var2;
+        } else if (var1.equals("UserRights")) {
+            this.userRights = XMLConverter.getInt(var2);
+        } else if (var1.equals("LocaleID")) {
+            LocaleID var6 = LocaleID.from_int(XMLConverter.getInt(var2));
+            this.locale = var6.toLocale();
+        } else if (var1.equals("ClientVersion")) {
+            this.clientVersion = XMLConverter.getInt(var2);
+        }
+
+    }
+
+    public void removeUserGroup(int var1) {
+        this.userGroups.remove(var1);
+    }
+
+    public void save(XMLWriter var1, XMLSerializationContext var2) throws IOException {
+        String var3 = XMLConverter.getXMLFromClassName(this.getClass().getName());
+        Properties var4 = XMLSerializationHelper.getHeaderAttributes(var3);
+        var1.writeStartElement("CrystalAnalysis.SecurityContext", var4);
+        this.saveContents(var1, var2);
+        var1.writeEndElement("CrystalAnalysis.SecurityContext");
+    }
+
+    public void save(XMLWriter var1, String var2, XMLSerializationContext var3) throws IOException {
+        var1.writeStartObjectElement(var2, "2", this, var3);
+        this.saveContents(var1, var3);
+        var1.writeEndElement(var2);
+    }
+
+    public void saveContents(XMLWriter var1, XMLSerializationContext var2) throws IOException {
+        var1.writeTextElement("Authentication", this.authentication, (Properties)null);
+        var1.writeTextElement("RptInfoObjectTitle", this.rptInfoObjectTitle, (Properties)null);
+        var1.writeTextElement("ServerName", this.serverName, (Properties)null);
+        var1.writeTextElement("UserName", this.userName, (Properties)null);
+        String var3 = PasswordEncryptHelper.encryptPassword(this.password);
+        var1.writeTextElement("Password", var3, (Properties)null);
+        var1.writeTextElement("Token", this.token, (Properties)null);
+        var1.writeIntElement("UserRights", this.userRights, (Properties)null);
+        LocaleID var4 = new LocaleID(this.locale);
+        var1.writeIntElement("LocaleID", var4.value(), (Properties)null);
+        Properties var5 = new Properties();
+        var1.writeStartElement("UserGroupIds", var5);
+        if (this.userGroups != null) {
+            int var6 = 0;
+
+            for(int var7 = this.userGroups.size(); var6 < var7; ++var6) {
+                Integer var8 = (Integer)this.userGroups.get(var6);
+                var1.writeIntElement("UserGroupId", var8.intValue(), (Properties)null);
+            }
+        }
+
+        var1.writeEndElement("UserGroupIds");
+        var1.writeIntElement("ClientVersion", this.clientVersion, (Properties)null);
+    }
+
+    public void setAuthentication(String authentication) {
+        this.authentication = authentication;
+    }
+
+    public void setRptInfoObjectTitle(String rptInfoObjectTitle) {
+        this.rptInfoObjectTitle = rptInfoObjectTitle;
+    }
+
+    public void setClientVersion(int clientVersion) {
+        this.clientVersion = clientVersion;
+    }
+
+    public void setLocale(Locale locale) {
+        this.locale = locale;
+    }
+
+    public void setPassword(String password) {
+        this.password = password;
+    }
+
+    public void setServerName(String serverName) {
+        this.serverName = serverName;
+    }
+
+    public void setToken(String token) {
+        this.token = token;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public void setUserRights(int userRights) {
+        this.userRights = userRights;
+    }
+
+    public void startElement(String var1, Map var2, Attributes var3) {
+    }
+}

+ 33 - 33
crystal-replace-view/src/main/java/com/crystaldecisions/proxy/remoteagent/CommunicationChannel.java

@@ -15,29 +15,29 @@ import java.util.Locale;
 import java.util.Vector;
 
 public class CommunicationChannel {
-    private Agent a = null;
+    private Agent agent = null;
     private boolean ifV = false;
     private ITextWriter forV = null;
-    private Vector doV = new Vector();
+    private Vector communicationChannelEventListeners = new Vector();
 
-    public CommunicationChannel(Agent var1) {
-        this.a = var1;
+    public CommunicationChannel(Agent agent) {
+        this.agent = agent;
     }
 
-    public void a(ICommunicationChannelEventListener var1) {
-        this.doV.add(var1);
+    public void addListener(ICommunicationChannelEventListener communicationChannelEventListener) {
+        this.communicationChannelEventListeners.add(communicationChannelEventListener);
     }
 
-    protected void a(CommunicationChannelEvent var1) {
-        for(int var2 = 0; var2 < this.doV.size(); ++var2) {
-            ICommunicationChannelEventListener var3 = (ICommunicationChannelEventListener)this.doV.elementAt(var2);
-            var3.a(var1);
+    protected void a(CommunicationChannelEvent communicationChannelEvent) {
+        for(int i = 0; i < this.communicationChannelEventListeners.size(); ++i) {
+            ICommunicationChannelEventListener communicationChannelEventListener = (ICommunicationChannelEventListener)this.communicationChannelEventListeners.elementAt(i);
+            communicationChannelEventListener.a(communicationChannelEvent);
         }
 
     }
 
     public void forM() {
-        this.a = null;
+        this.agent = null;
         this.forV = null;
     }
 
@@ -45,8 +45,8 @@ public class CommunicationChannel {
         return this.ifV;
     }
 
-    public Locale ifM() {
-        return this.a != null ? this.a.getLocale() : Locale.getDefault();
+    public Locale getLocale() {
+        return this.agent != null ? this.agent.getLocale() : Locale.getDefault();
     }
 
     public ITextWriter a() {
@@ -64,7 +64,7 @@ public class CommunicationChannel {
     }
 
     public void ifM(ICommunicationChannelEventListener var1) {
-        this.doV.remove(var1);
+        this.communicationChannelEventListeners.remove(var1);
     }
 
     public ResultInfo a(ISecurityContext iSecurityContext, String docId, int requestId, int options, IXMLSerializable ixmlSerializable, RequestPriority requestPriority) throws ReportSDKException {
@@ -77,32 +77,32 @@ public class CommunicationChannel {
                     RecordingUtil.a(this.forV, var7);
                 }
 
-                CommandObject var13 = new CommandObject(requestId, ixmlSerializable);
-                this.a.execute(var13);
-                ResultInfo var8 = (ResultInfo)var13.getOutput();
-                if (var8 == null) {
-                    var8 = new ResultInfo();
-                    var8.setResultCode(-2147217405);
-                    var8.setErrorMsg(ExceptionHelper.loadResultCodeMsg(-2147217405, this.ifM()));
-                    var8.setResultObj((IXMLSerializable)null);
+                CommandObject commandObject = new CommandObject(requestId, ixmlSerializable);
+                this.agent.execute(commandObject);
+                ResultInfo resultInfo = (ResultInfo)commandObject.getOutput();
+                if (resultInfo == null) {
+                    resultInfo = new ResultInfo();
+                    resultInfo.setResultCode(-2147217405);
+                    resultInfo.setErrorMsg(ExceptionHelper.loadResultCodeMsg(-2147217405, this.getLocale()));
+                    resultInfo.setResultObj((IXMLSerializable)null);
                 }
 
                 if (this.ifV && this.forV != null) {
                     boolean var9 = ClientSDKOptions.m_RequestRecordingOptions.m_RecordSucceededResultDetails;
-                    boolean var10 = var9 || var8.getResultCode() != 0 || requestId == 3;
-                    RecordingUtil.a(this.forV, var8, var10);
+                    boolean var10 = var9 || resultInfo.getResultCode() != 0 || requestId == 3;
+                    RecordingUtil.a(this.forV, resultInfo, var10);
                 }
 
-                int var14 = var8.getResultCode();
-                if (ResultCode.FAILED(var14)) {
-                    String var15 = var8.getErrorMsg(true);
-                    if (var15.length() == 0) {
-                        var8.setErrorMsg(ExceptionHelper.loadResultCodeMsg(var14, this.ifM()));
+                int resultCode = resultInfo.getResultCode();
+                if (ResultCode.FAILED(resultCode)) {
+                    String errorMsg = resultInfo.getErrorMsg(true);
+                    if (errorMsg.length() == 0) {
+                        resultInfo.setErrorMsg(ExceptionHelper.loadResultCodeMsg(resultCode, this.getLocale()));
                     }
                 }
 
-                this.a(new CommunicationChannelEvent(this, var8));
-                return var8;
+                this.a(new CommunicationChannelEvent(this, resultInfo));
+                return resultInfo;
             } catch (IOException var11) {
                 ;
             } catch (NullPointerException var12) {
@@ -130,10 +130,10 @@ public class CommunicationChannel {
     }
 
     public Object a(Class var1) {
-        return this.a.getInternal(var1);
+        return this.agent.getInternal(var1);
     }
 
     public Object a(String var1, Class var2) {
-        return this.a.getInternal(var1, var2);
+        return this.agent.getInternal(var1, var2);
     }
 }

+ 3 - 3
crystal-replace-view/src/main/java/com/crystaldecisions/proxy/remoteagent/RecordingUtil.java

@@ -125,13 +125,13 @@ public class RecordingUtil {
                     }
                 }
             } catch (FileNotFoundException var29) {
-                var6 = SDKResourceManager.getString("Error_PlayBackFileNotFound", var0.ifM());
+                var6 = SDKResourceManager.getString("Error_PlayBackFileNotFound", var0.getLocale());
                 ReportSDKServerException.throwReportSDKServerException(-2147217387, var6, var29);
             } catch (IOException var30) {
-                var6 = SDKResourceManager.getString("Error_PlayBackInvalidFile", var0.ifM());
+                var6 = SDKResourceManager.getString("Error_PlayBackInvalidFile", var0.getLocale());
                 ReportSDKServerException.throwReportSDKServerException(-2147217387, var6, var30);
             } catch (SAXException var31) {
-                var6 = SDKResourceManager.getString("Error_PlayBackXMLParseFailed", var0.ifM());
+                var6 = SDKResourceManager.getString("Error_PlayBackXMLParseFailed", var0.getLocale());
                 ReportSDKServerException.throwReportSDKServerException(-2147217387, var6, var31);
             }
 

+ 1 - 1
crystal-replace-view/src/main/java/com/crystaldecisions/proxy/remoteagent/RemoteAgent.java

@@ -28,7 +28,7 @@ public class RemoteAgent implements IRemoteAgent {
 
     public RemoteAgent(Agent agent) {
         this.communicationChannel = new CommunicationChannel(agent);
-        this.locale = this.communicationChannel.ifM();
+        this.locale = this.communicationChannel.getLocale();
         this.doV = agent instanceof InternalImplementionAgent;
         this.actionBuffer = this.doV ? new ActionBuffer(1) : new ActionBuffer();
     }

+ 9 - 9
crystal-replace-view/src/main/java/com/crystaldecisions/sdk/occa/report/application/ReportClientDocument.java

@@ -475,20 +475,20 @@ public class ReportClientDocument extends ClientDocument implements IReportClien
         }
 
         ResultInfo resultInfo = this.save(146, options, saveAsDataDocumentRequest);
-        PropertyBag var7 = (PropertyBag)resultInfo.getResultObj();
-        if (var7 == null) {
-            String var8 = SDKResourceManager.getString("Error_NullResultInfo", this.getLocale());
-            ReportSDKServerException.throwReportSDKServerException(-2147217405, var8);
+        PropertyBag resultObj = (PropertyBag)resultInfo.getResultObj();
+        if (resultObj == null) {
+            String errorMessage = SDKResourceManager.getString("Error_NullResultInfo", this.getLocale());
+            ReportSDKServerException.throwReportSDKServerException(-2147217405, errorMessage);
         }
 
-        PropertyBag documentUIDPropertyBag = (PropertyBag)var7.get("DocumentUID");
+        PropertyBag documentUIDPropertyBag = (PropertyBag)resultObj.get("DocumentUID");
         documentUIDPropertyBag.put("ext", ".rpt");
         this.propertyBag = documentUIDPropertyBag;
         if (this.reportDocument != null) {
-            this.reportDocument.setName((String)var7.get("DisplayName"));
+            this.reportDocument.setName((String)resultObj.get("DisplayName"));
             this.reportDocument.setUID(documentUIDPropertyBag);
-            this.reportDocument.setMajorVersion(((Integer)var7.get("MajorVersion")).intValue());
-            this.reportDocument.setMinorVersion(((Integer)var7.get("MinorVersion")).intValue());
+            this.reportDocument.setMajorVersion((Integer) resultObj.get("MajorVersion"));
+            this.reportDocument.setMinorVersion((Integer) resultObj.get("MinorVersion"));
         }
 
     }
@@ -678,7 +678,7 @@ public class ReportClientDocument extends ClientDocument implements IReportClien
                     }
                 }
 
-                var2.a(this.B);
+                var2.addListener(this.B);
                 this.reportDefController.ifM(var2);
             }
 

+ 1 - 1
crystal-replace-view/src/main/java/com/crystaldecisions/sdk/occa/report/application/ReportDefController.java

@@ -371,7 +371,7 @@ public class ReportDefController extends an implements IReportDefController {
 
     void ifM(CommunicationChannel var1) {
         if (var1 != null && this.am != null) {
-            var1.a(this.am);
+            var1.addListener(this.am);
         }
 
     }

+ 1 - 1
crystal-replace-view/src/main/java/com/crystaldecisions/sdk/occa/report/application/ReportObjectController.java

@@ -1106,7 +1106,7 @@ public class ReportObjectController implements IReportObjectController {
                     var5 = new c1(false);
                 }
             } else if (var1 instanceof ICrossTabObject) {
-                assert var2 instanceof ICrossTabObject : "Changing a crosstab object into a different object!";
+                assert var2 instanceof ICrossTabObject : "Changing addListener crosstab object into addListener different object!";
 
                 var5 = new ac((ICrossTabObject)var1, (ICrossTabObject)var2);
                 var7 = true;

+ 1 - 1
crystal-replace-view/src/main/java/com/crystaldecisions/sdk/occa/report/application/ay.java

@@ -63,7 +63,7 @@ class ay implements IDatabaseControllerEventListener, IRowsetControllerEventList
 
     void a(CommunicationChannel var1) {
         if (var1 != null) {
-            var1.a(this);
+            var1.addListener(this);
         }
 
     }

+ 610 - 0
crystal-replace-view/src/main/java/com/crystaldecisions/sdk/occa/report/document/DataDocument.java

@@ -0,0 +1,610 @@
+package com.crystaldecisions.sdk.occa.report.document;
+
+/**
+ * @author sunyj
+ * @since 2017/12/27 15:26
+ */
+
+import com.crystaldecisions.client.helper.CloneUtil;
+import com.crystaldecisions.client.helper.XMLSerializationHelper;
+import com.crystaldecisions.sdk.occa.report.data.*;
+import com.crystaldecisions.sdk.occa.report.lib.*;
+import com.crystaldecisions.xml.serialization.*;
+import org.xml.sax.Attributes;
+
+import java.io.IOException;
+import java.util.Date;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Properties;
+
+public class DataDocument implements IXMLSerializable, IDataDocument, IClone, IControllable {
+    protected ControllableMixin byteV = new ControllableMixin(this);
+    private IDatabase database = null;
+    private String remoteID = null;
+    private String name = null;
+    private PropertyBag uid = null;
+    private int options = 0;
+    private IDataDefinition dataDefinition = null;
+    private Date timestamp = null;
+
+    public DataDocument(IDataDocument var1) {
+        var1.copyTo(this, true);
+    }
+
+    public DataDocument() {
+    }
+
+    public Object clone(boolean var1) {
+        DataDocument var2 = new DataDocument();
+        this.copyTo(var2, var1);
+        return var2;
+    }
+
+    private void a(FilterItems var1, FilterItems var2, DataDocument.a var3) {
+        int var4 = var1.size();
+        var2.ensureCapacity(var4);
+
+        for(int var5 = 0; var5 < var4; ++var5) {
+            IFilterItem var6 = var1.getFilterItem(var5);
+            IFilterItem var7 = (IFilterItem)var6.clone(true);
+            if (var7 instanceof IFieldRangeFilterItem) {
+                IFieldRangeFilterItem var8 = (IFieldRangeFilterItem)var6;
+                IFieldRangeFilterItem var9 = (IFieldRangeFilterItem)var7;
+                IField var10 = var8.getRangeField();
+                IField var11 = var3.a(var10);
+                var9.setRangeField(var11);
+            }
+
+            var2.add(var7);
+        }
+
+    }
+
+    private void a(Filters var1, Filters var2, DataDocument.a var3) {
+        int var4 = var1.size();
+        var2.ensureCapacity(var4);
+
+        for(int var5 = 0; var5 < var4; ++var5) {
+            IFilter var6 = var1.getFilter(var5);
+            IFilter var7 = (IFilter)var6.clone(true);
+            FilterItems var8 = ((Filter)var6).getFilterItems();
+            FilterItems var9 = ((Filter)var7).getFilterItems();
+            var9.removeAllElements();
+            this.a(var8, var9, var3);
+            var2.add(var7);
+        }
+
+    }
+
+    private void a(Groups var1, Groups var2, DataDocument.a var3) {
+        int var4 = var1.size();
+        var2.ensureCapacity(var4);
+
+        for(int var5 = 0; var5 < var4; ++var5) {
+            IGroup var6 = var1.getGroup(var5);
+            IGroup var7 = (IGroup)var6.clone(true);
+            IField var8 = var6.getConditionField();
+            IField var9 = var3.a(var8);
+            var7.setConditionField(var9);
+            IGroupOptions var10 = var6.getOptions();
+            IGroupOptions var11 = var7.getOptions();
+            if (var11 instanceof SpecifiedGroupOptions) {
+                SpecifiedGroupOptions var12 = (SpecifiedGroupOptions)var10;
+                SpecifiedGroupOptions var13 = (SpecifiedGroupOptions)var11;
+                Filters var14 = var12.getSpecifiedValueFilters();
+                Filters var15 = var13.getSpecifiedValueFilters();
+                var15.removeAllElements();
+                this.a(var14, var15, var3);
+            }
+
+            if (var10.getHierarchicalOptions() != null) {
+                IField var16 = var3.a(var10.getHierarchicalOptions().getParentIDField());
+                var11.getHierarchicalOptions().setParentIDField(var16);
+            }
+
+            var2.add(var7);
+        }
+
+    }
+
+    private IField a(IField var1, DataDocument.a var2) {
+        FieldKind var3 = var1.getKind();
+        if (var3 == FieldKind.summaryField) {
+            IField var4 = (IField)var1.clone(true);
+            ISummaryField var5 = (ISummaryField)var1;
+            ISummaryField var6 = (ISummaryField)var4;
+            IField var7 = var5.getSummarizedField();
+            IGroup var8 = var5.getGroup();
+            IField var9 = var2.a(var7);
+            if (var9 != null) {
+                var6.setSummarizedField(var9);
+            }
+
+            if (var8 != null) {
+                IGroup var10 = var2.a(var8);
+                if (var10 != null) {
+                    var6.setGroup(var10);
+                }
+            }
+
+            IField var13 = var5.getSecondarySummarizedField();
+            if (var13 != null) {
+                IField var11 = var2.a(var7);
+                if (var11 != null) {
+                    var6.setSecondarySummarizedField(var11);
+                }
+            }
+
+            IGroup var14 = var5.getSecondGroupForPercentage();
+            if (var14 != null) {
+                IGroup var12 = var2.a(var14);
+                if (var12 != null) {
+                    var6.setSecondGroupForPercentage(var12);
+                }
+            }
+
+            return var6;
+        } else {
+            return var2.a(var1);
+        }
+    }
+
+    private void a(Fields var1, Fields var2, DataDocument.a var3) {
+        int var4 = var1.size();
+        var2.ensureCapacity(var4);
+
+        for(int var5 = 0; var5 < var4; ++var5) {
+            IParameterField var6 = (IParameterField)var1.getField(var5);
+            IParameterField var7 = (IParameterField)var6.clone(true);
+            IField var8 = var6.getBrowseField();
+            IField var9 = var3.a(var8);
+            var7.setBrowseField(var9);
+
+            assert !ControllableHelper.hasEnabledController(var2);
+
+            var2.add(var7);
+        }
+
+    }
+
+    private void ifM(Fields var1, Fields var2, DataDocument.a var3) {
+        int var4 = var1.size();
+        var2.ensureCapacity(var4);
+
+        for(int var5 = 0; var5 < var4; ++var5) {
+            RunningTotalField var6 = (RunningTotalField)var1.getField(var5);
+            RunningTotalField var7 = (RunningTotalField)var6.clone(true);
+            IField var8 = var6.getSummarizedField();
+            IField var9 = var6.getSecondarySummarizedField();
+            IField var10 = var3.a(var8);
+            if (var10 != null) {
+                var7.setSummarizedField(var10);
+            }
+
+            IField var11;
+            if (var9 != null) {
+                var11 = var3.a(var9);
+                if (var11 != null) {
+                    var7.setSecondarySummarizedField(var11);
+                }
+            }
+
+            IField var12;
+            if (var6.getEvaluateCondition() != null && var6.getEvaluateCondition() instanceof IField) {
+                var11 = (IField)var6.getEvaluateCondition();
+                var12 = var3.a(var11);
+                if (var12 != null) {
+                    var7.setEvaluateCondition(var12);
+                }
+            }
+
+            IGroup var13;
+            IGroup var14;
+            if (var6.getEvaluateCondition() != null && var6.getEvaluateCondition() instanceof IGroup) {
+                var13 = (IGroup)var6.getEvaluateCondition();
+                var14 = var3.a(var13);
+                if (var14 != null) {
+                    var7.setEvaluateCondition(var14);
+                }
+            }
+
+            if (var6.getResetCondition() != null && var6.getResetCondition() instanceof IField) {
+                var11 = (IField)var6.getResetCondition();
+                var12 = var3.a(var11);
+                if (var12 != null) {
+                    var7.setResetCondition(var12);
+                }
+            }
+
+            if (var6.getResetCondition() != null && var6.getResetCondition() instanceof IGroup) {
+                var13 = (IGroup)var6.getResetCondition();
+                var14 = var3.a(var13);
+                if (var14 != null) {
+                    var7.setResetCondition(var14);
+                }
+            }
+
+            assert !ControllableHelper.hasEnabledController(var2);
+
+            var2.add(var7);
+        }
+
+    }
+
+    private void a(Alerts var1, Alerts var2, DataDocument.a var3) {
+        int var4 = var1.size();
+        var2.ensureCapacity(var4);
+
+        for(int var5 = 0; var5 < var4; ++var5) {
+            Alert var6 = (Alert)var1.getAlert(var5);
+            Alert var7 = (Alert)var6.clone(true);
+
+            assert !ControllableHelper.hasEnabledController(var7);
+
+            var2.add(var7);
+        }
+
+    }
+
+    private void doM(Fields var1, Fields var2, DataDocument.a var3) {
+        int var4 = var1.size();
+        var2.ensureCapacity(var4);
+
+        for(int var5 = 0; var5 < var4; ++var5) {
+            IField var6 = var1.getField(var5);
+            IField var7 = this.a(var6, var3);
+
+            assert !ControllableHelper.hasEnabledController(var2);
+
+            var2.add(var7);
+        }
+
+    }
+
+    private void a(Sorts var1, Sorts var2, DataDocument.a var3) {
+        int var4 = var1.size();
+        var2.ensureCapacity(var4);
+
+        for(int var5 = 0; var5 < var4; ++var5) {
+            ISort var6 = var1.getSort(var5);
+            ISort var7 = (ISort)var6.clone(true);
+            IField var8 = var6.getSortField();
+            IField var9 = var3.a(var8);
+            var7.setSortField(var9);
+            var2.add(var7);
+        }
+
+    }
+
+    public void copyTo(Object var1, boolean var2) {
+        if (var1 == null) {
+            throw new NullPointerException();
+        } else if (!(var1 instanceof IDataDocument)) {
+            throw new ClassCastException();
+        } else {
+            IDataDocument var3 = (IDataDocument)var1;
+            var3.setName(this.name);
+            var3.setRemoteID(this.remoteID);
+            var3.setOptions(this.options);
+            if (this.uid != null && var2) {
+                var3.setUID((PropertyBag)this.uid.clone(var2));
+            } else {
+                var3.setUID(this.uid);
+            }
+
+            if (this.database != null && var2) {
+                var3.setDatabase((IDatabase)this.database.clone(var2));
+            } else {
+                var3.setDatabase(this.database);
+            }
+
+            if (this.dataDefinition != null && var2) {
+                IDatabase var4 = var3.getDatabase();
+                var3.setDataDefinition(this.a(this.dataDefinition, var4));
+            } else {
+                var3.setDataDefinition(this.dataDefinition);
+            }
+
+            if (this.timestamp != null && var2) {
+                var3.setTimestamp((Date)this.timestamp.clone());
+            } else {
+                var3.setTimestamp(this.timestamp);
+            }
+
+        }
+    }
+
+    public Object createMember(String var1, Attributes var2, XMLSerializationContext var3, Map var4, boolean[] var5) {
+        Object var6 = ClassFactory.createObject(var2, var3, var5);
+        if (var1.equals("UID")) {
+            this.uid = (PropertyBag)var6;
+        } else if (var1.equals("Database")) {
+            this.database = (IDatabase)var6;
+        } else if (var1.equals("DataDefinition")) {
+            this.dataDefinition = (IDataDefinition)var6;
+        }
+
+        return var6;
+    }
+
+    private IDataDefinition a(IDataDefinition var1, IDatabase var2) {
+        Tables tables = var2.getTables();
+        Fields resultFields = var1.getResultFields();
+        Groups groups = var1.getGroups();
+        Sorts recordSorts = var1.getRecordSorts();
+        Fields formulaFields = var1.getFormulaFields();
+        Fields parameterFields = var1.getParameterFields();
+        Fields runningTotalFields = var1.getRunningTotalFields();
+        CustomFunctions customFunctions = var1.getCustomFunctions();
+        IFilter recordFilter = var1.getRecordFilter();
+        IFilter groupFilter = var1.getGroupFilter();
+        IFilter savedDataFilter = var1.getSavedDataFilter();
+        Alerts alerts = var1.getAlerts();
+        DataDefinition dataDefinition = new DataDefinition();
+        Fields var16 = dataDefinition.getResultFields();
+        Groups var17 = dataDefinition.getGroups();
+        Sorts var18 = dataDefinition.getRecordSorts();
+        Fields var19 = dataDefinition.getFormulaFields();
+        Fields var20 = dataDefinition.getParameterFields();
+        Fields var21 = dataDefinition.getRunningTotalFields();
+        CustomFunctions var22 = dataDefinition.getCustomFunctions();
+        IFilter var23 = dataDefinition.getRecordFilter();
+        IFilter var24 = dataDefinition.getGroupFilter();
+        IFilter var25 = dataDefinition.getSavedDataFilter();
+        Alerts var26 = dataDefinition.getAlerts();
+        DataDocument.a var27 = new DataDocument.a(tables, var16, var19, var20, var21, var17);
+        formulaFields.copyTo(var19, true);
+        customFunctions.copyTo(var22, true);
+        this.a(parameterFields, var20, var27);
+        this.a(groups, var17, var27);
+        this.ifM(runningTotalFields, var21, var27);
+        this.doM(resultFields, var16, var27);
+        this.a(recordSorts, var18, var27);
+        this.a(alerts, var26, var27);
+        FilterItems var28 = ((Filter)recordFilter).getFilterItems();
+        FilterItems var29 = ((Filter)var23).getFilterItems();
+        this.a(var28, var29, var27);
+        var23.setFreeEditingText(recordFilter.getFreeEditingText());
+        var23.setName(recordFilter.getName());
+        FilterItems var30 = ((Filter)groupFilter).getFilterItems();
+        FilterItems var31 = ((Filter)var24).getFilterItems();
+        this.a(var30, var31, var27);
+        var24.setFreeEditingText(groupFilter.getFreeEditingText());
+        var24.setName(groupFilter.getName());
+        FilterItems var32 = ((Filter)savedDataFilter).getFilterItems();
+        FilterItems var33 = ((Filter)var25).getFilterItems();
+        this.a(var32, var33, var27);
+        var25.setFreeEditingText(savedDataFilter.getFreeEditingText());
+        var25.setName(savedDataFilter.getName());
+        return dataDefinition;
+    }
+
+    public void endElement(String var1, Map var2) {
+    }
+
+    public IDatabase getDatabase() {
+        if (this.database == null) {
+            this.database = new Database();
+        }
+
+        return this.database;
+    }
+
+    public IDataDefinition getDataDefinition() {
+        if (this.dataDefinition == null) {
+            this.dataDefinition = new DataDefinition();
+        }
+
+        return this.dataDefinition;
+    }
+
+    public String getName() {
+        return this.name;
+    }
+
+    public int getOptions() {
+        return this.options;
+    }
+
+    public String getRemoteID() {
+        return this.remoteID;
+    }
+
+    public Date getTimestamp() {
+        return this.timestamp;
+    }
+
+    public PropertyBag getUID() {
+        if (this.uid == null) {
+            this.uid = new PropertyBag();
+        }
+
+        return this.uid;
+    }
+
+    public boolean hasContent(Object var1) {
+        if (!(var1 instanceof IDataDocument)) {
+            return false;
+        } else {
+            IDataDocument var2 = (IDataDocument)var1;
+            if (this.options != var2.getOptions()) {
+                return false;
+            } else if (!CloneUtil.equalStrings(this.name, var2.getName())) {
+                return false;
+            } else if (!CloneUtil.equalStrings(this.remoteID, var2.getRemoteID())) {
+                return false;
+            } else if (!CloneUtil.hasContent(this.getUID(), var2.getUID())) {
+                return false;
+            } else if (!CloneUtil.hasContent(this.getDataDefinition(), var2.getDataDefinition())) {
+                return false;
+            } else if (!CloneUtil.equalObjects(this.getTimestamp(), var2.getTimestamp())) {
+                return false;
+            } else {
+                return CloneUtil.hasContent(this.getDatabase(), var2.getDatabase());
+            }
+        }
+    }
+
+    public void readElement(String var1, String var2, Attributes var3, Map var4) {
+        if (var1.equals("Name")) {
+            this.name = var2;
+        } else if (var1.equals("RemoteID")) {
+            this.remoteID = var2;
+        } else if (var1.equals("Options")) {
+            this.options = XMLConverter.getInt(var2);
+        } else if (var1.equals("Timestamp")) {
+            this.timestamp = XMLConverter.getDate(var2);
+        }
+
+    }
+
+    public void save(XMLWriter var1, XMLSerializationContext var2) throws IOException {
+        String var3 = XMLConverter.getXMLFromClassName(this.getClass().getName());
+        Properties var4 = XMLSerializationHelper.getHeaderAttributes(var3);
+        var1.writeStartElement("CrystalReports.DataDocument", var4);
+        this.saveContents(var1, var2);
+        var1.writeEndElement("CrystalReports.DataDocument");
+    }
+
+    public void save(XMLWriter var1, String var2, XMLSerializationContext var3) throws IOException {
+        var1.writeStartObjectElement(var2, "2", this, var3);
+        this.saveContents(var1, var3);
+        var1.writeEndElement(var2);
+    }
+
+    public void saveContents(XMLWriter var1, XMLSerializationContext var2) throws IOException {
+        var1.writeTextElement("Name", this.name, (Properties)null);
+        var1.writeTextElement("RemoteID", this.remoteID, (Properties)null);
+        var1.writeObjectElement(this.uid, "UID", var2);
+        var1.writeObjectElement((IXMLSerializable)this.database, "Database", var2);
+        var1.writeObjectElement((IXMLSerializable)this.dataDefinition, "DataDefinition", var2);
+        var1.writeIntElement("Options", this.options, (Properties)null);
+        var1.writeStartElement("Timestamp", (Properties)null);
+        var1.writeDate(this.timestamp);
+        var1.writeEndElement("Timestamp");
+    }
+
+    public void setDatabase(IDatabase database) {
+        this.database = database;
+    }
+
+    public void setDataDefinition(IDataDefinition dataDefinition) {
+        this.dataDefinition = dataDefinition;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public void setOptions(int options) {
+        this.options = options;
+    }
+
+    public void setRemoteID(String remoteID) {
+        this.remoteID = remoteID;
+    }
+
+    public void setTimestamp(Date timestamp) {
+        this.timestamp = timestamp;
+    }
+
+    public void setUID(PropertyBag uid) {
+        this.uid = uid;
+    }
+
+    public void startElement(String var1, Map var2, Attributes var3) {
+    }
+
+    public ControllableMixin getControllableMixin() {
+        return this.byteV;
+    }
+
+    public void doControllerModification(Object var1) {
+        assert this.isDirectlyControllable();
+
+    }
+
+    public boolean isDirectlyControllable() {
+        return true;
+    }
+
+    public void enumerateMembers(IMemberVisitor var1) {
+        this.database = (IDatabase)var1.visit(this.database, true);
+        this.dataDefinition = (IDataDefinition)var1.visit(this.dataDefinition, true);
+    }
+
+    private class a {
+        private Tables tryV = null;
+        private Fields newV = null;
+        private Fields ifV = null;
+        private Fields intV = null;
+        private Fields doV = null;
+        private Groups forV = null;
+
+        a(Tables var2, Fields var3, Fields var4, Fields var5, Fields var6, Groups var7) {
+            this.tryV = var2;
+            this.newV = var3;
+            this.ifV = var4;
+            this.intV = var5;
+            this.doV = var6;
+            this.forV = var7;
+        }
+
+        IField a(IField var1) {
+            if (var1 == null) {
+                return null;
+            } else {
+                FieldKind var2 = var1.getKind();
+                IField var3 = null;
+                String var4;
+                switch(var2.value()) {
+                    case 1:
+                        IDBField var10 = (IDBField)var1;
+                        String var5 = var10.getTableAlias();
+                        int var6 = this.tryV.findByAlias(var5);
+                        ITable var7 = this.tryV.getTable(var6);
+                        Fields var8 = var7.getDataFields();
+                        String var9 = var10.getFormulaForm();
+                        var3 = this.a(var9, var8, FieldDisplayNameType.formulaName);
+                        break;
+                    case 2:
+                        var4 = var1.getFormulaForm();
+                        var3 = this.a(var4, this.ifV, FieldDisplayNameType.formulaName);
+                        break;
+                    case 3:
+                        var4 = var1.getFormulaForm();
+                        var3 = this.a(var4, this.intV, FieldDisplayNameType.formulaName);
+                        break;
+                    case 4:
+                    case 6:
+                    default:
+                        var3 = (IField)var1.clone(true);
+                        break;
+                    case 5:
+                        var4 = var1.getFormulaForm();
+                        var3 = this.a(var4, this.newV, FieldDisplayNameType.formulaName);
+                        if (var3 == null) {
+                            var3 = DataDocument.this.a(var1, this);
+                        }
+                        break;
+                    case 7:
+                        var4 = var1.getFormulaForm();
+                        var3 = this.a(var4, this.doV, FieldDisplayNameType.formulaName);
+                }
+
+                return var3;
+            }
+        }
+
+        IField a(String var1, Fields var2, FieldDisplayNameType var3) {
+            int var4 = var2.find(var1, var3, Locale.getDefault());
+            return var4 >= 0 ? var2.getField(var4) : null;
+        }
+
+        IGroup a(IGroup var1) {
+            int var2 = this.forV.findIndexOf(var1);
+            return var2 >= 0 ? this.forV.getGroup(var2) : null;
+        }
+    }
+}

+ 291 - 0
crystal-replace-view/src/main/java/com/crystaldecisions/sdk/occa/report/document/ReportDocument.java

@@ -0,0 +1,291 @@
+package com.crystaldecisions.sdk.occa.report.document;
+
+/**
+ * @author sunyj
+ * @since 2017/12/27 15:24
+ */
+
+import com.crystaldecisions.client.helper.CloneUtil;
+import com.crystaldecisions.client.helper.XMLSerializationHelper;
+import com.crystaldecisions.sdk.occa.report.application.ReportClientDocument;
+import com.crystaldecisions.sdk.occa.report.data.IDataDefinition;
+import com.crystaldecisions.sdk.occa.report.data.IDatabase;
+import com.crystaldecisions.sdk.occa.report.definition.IReportDefinition;
+import com.crystaldecisions.sdk.occa.report.definition.ReportDefinition;
+import com.crystaldecisions.sdk.occa.report.lib.*;
+import com.crystaldecisions.xml.serialization.*;
+import org.xml.sax.Attributes;
+
+import java.io.IOException;
+import java.util.Map;
+import java.util.Properties;
+
+public class ReportDocument extends DataDocument implements IXMLSerializable, IReportDocument {
+    private IReportOptions elseV = null;
+    private ISummaryInfo b = null;
+    private int longV = 0;
+    private int charV = 0;
+    private ReportDefinition gotoV = null;
+    private IPrintOptions voidV = null;
+
+    public ReportDocument(IReportDocument var1) {
+        var1.copyTo(this, true);
+    }
+
+    public ReportDocument() {
+    }
+
+    public Object clone(boolean var1) {
+        ReportDocument var2 = new ReportDocument();
+        this.copyTo(var2, var1);
+        return var2;
+    }
+
+    public void copyTo(Object var1, boolean var2) {
+        if (var1 == null) {
+            throw new NullPointerException();
+        } else if (!(var1 instanceof IReportDocument)) {
+            throw new ClassCastException();
+        } else {
+            super.copyTo(var1, var2);
+            IReportDocument var3 = (IReportDocument)var1;
+            if (this.elseV != null && var2) {
+                if (CloneUtil.canCopyTo(this.elseV, var3.getReportOptions())) {
+                    this.elseV.copyTo(var3.getReportOptions(), true);
+                } else {
+                    var3.setReportOptions((IReportOptions)this.elseV.clone(var2));
+                }
+            } else {
+                var3.setReportOptions(this.elseV);
+            }
+
+            if (this.voidV != null && var2) {
+                ((ReportDocument)var3).setPrintOptions((IPrintOptions)this.voidV.clone(var2));
+            } else {
+                ((ReportDocument)var3).setPrintOptions(this.voidV);
+            }
+
+            if (this.b != null && var2) {
+                if (CloneUtil.canCopyTo(this.b, var3.getSummaryInfo())) {
+                    this.b.copyTo(var3.getSummaryInfo(), true);
+                } else {
+                    var3.setSummaryInfo((ISummaryInfo)this.b.clone(var2));
+                }
+            } else {
+                var3.setSummaryInfo(this.b);
+            }
+
+            if (this.gotoV != null && var2) {
+                if (CloneUtil.canCopyTo(this.gotoV, var3.getReportDefinition())) {
+                    this.gotoV.copyTo(var3.getReportDefinition(), true);
+                } else {
+                    var3.setReportDefinition((IReportDefinition)this.gotoV.clone(var2));
+                }
+            } else {
+                var3.setReportDefinition(this.gotoV);
+            }
+
+            var3.setMajorVersion(this.longV);
+            var3.setMinorVersion(this.charV);
+        }
+    }
+
+    public Object createMember(String var1, Attributes var2, XMLSerializationContext var3, Map var4, boolean[] var5) {
+        Object var6 = ClassFactory.createObject(var2, var3, var5);
+        if (var1.equals("UID")) {
+            this.setUID((PropertyBag)var6);
+        } else if (var1.equals("SummaryInfo")) {
+            this.b = (ISummaryInfo)var6;
+        } else if (var1.equals("Database")) {
+            this.setDatabase((IDatabase)var6);
+        } else if (var1.equals("DataDefinition")) {
+            this.setDataDefinition((IDataDefinition)var6);
+        } else if (var1.equals("ReportDefinition")) {
+            this.gotoV = (ReportDefinition)var6;
+        } else if (var1.equals("ReportOptions")) {
+            this.elseV = (IReportOptions)var6;
+        } else if (var1.equals("PrintOptions")) {
+            this.voidV = (IPrintOptions)var6;
+        }
+
+        return var6;
+    }
+
+    public void endElement(String var1, Map var2) {
+    }
+
+    public int getMajorVersion() {
+        return this.longV;
+    }
+
+    public int getMinorVersion() {
+        return this.charV;
+    }
+
+    public ReportDefinition getReportDefinition() {
+        if (this.gotoV == null) {
+            this.gotoV = new ReportDefinition();
+            this.byteV.propagateController(this.gotoV);
+        }
+
+        return this.gotoV;
+    }
+
+    public IReportOptions getReportOptions() {
+        if (this.elseV == null) {
+            this.elseV = new ReportOptions();
+            this.byteV.propagateController(this.elseV);
+        }
+
+        return this.elseV;
+    }
+
+    public IPrintOptions getPrintOptions() {
+        if (this.voidV == null) {
+            this.voidV = new PrintOptions();
+        }
+
+        return this.voidV;
+    }
+
+    public ISummaryInfo getSummaryInfo() {
+        if (this.b == null) {
+            this.b = new SummaryInfo();
+            this.byteV.propagateController(this.b);
+        }
+
+        return this.b;
+    }
+
+    public boolean hasContent(Object var1) {
+        if (!(var1 instanceof IReportDocument)) {
+            return false;
+        } else if (!super.hasContent(var1)) {
+            return false;
+        } else {
+            IReportDocument var2 = (IReportDocument)var1;
+            if (this.longV != var2.getMajorVersion()) {
+                return false;
+            } else if (this.charV != var2.getMinorVersion()) {
+                return false;
+            } else if (!CloneUtil.hasContent(this.getReportDefinition(), var2.getReportDefinition())) {
+                return false;
+            } else if (!CloneUtil.hasContent(this.getReportOptions(), var2.getReportOptions())) {
+                return false;
+            } else {
+                return CloneUtil.hasContent(this.getSummaryInfo(), var2.getSummaryInfo());
+            }
+        }
+    }
+
+    public void readElement(String var1, String var2, Attributes var3, Map var4) {
+        super.readElement(var1, var2, var3, var4);
+        if (var1.equals("MajorVersion")) {
+            this.longV = XMLConverter.getInt(var2);
+        } else if (var1.equals("MinorVersion")) {
+            this.charV = XMLConverter.getInt(var2);
+        }
+
+    }
+
+    public void save(XMLWriter var1, XMLSerializationContext var2) throws IOException {
+        String var3 = XMLConverter.getXMLFromClassName(this.getClass().getName());
+        Properties var4 = XMLSerializationHelper.getHeaderAttributes(var3);
+        var1.writeStartElement("CrystalReports.ReportDocument", var4);
+        this.saveContents(var1, var2);
+        var1.writeEndElement("CrystalReports.ReportDocument");
+    }
+
+    public void save(XMLWriter var1, String var2, XMLSerializationContext var3) throws IOException {
+        var1.writeStartObjectElement(var2, "2", this, var3);
+        this.saveContents(var1, var3);
+        var1.writeEndElement(var2);
+    }
+
+    public void saveContents(XMLWriter var1, XMLSerializationContext var2) throws IOException {
+        super.saveContents(var1, var2);
+        var1.writeObjectElement((IXMLSerializable)this.b, "SummaryInfo", var2);
+        var1.writeObjectElement(this.gotoV, "ReportDefinition", var2);
+        var1.writeObjectElement((IXMLSerializable)this.elseV, "ReportOptions", var2);
+        var1.writeObjectElement((IXMLSerializable)this.voidV, "PrintOptions", var2);
+        var1.writeIntElement("MajorVersion", this.longV, (Properties)null);
+        var1.writeIntElement("MinorVersion", this.charV, (Properties)null);
+    }
+
+    public void setMajorVersion(int var1) {
+        this.longV = var1;
+    }
+
+    public void setMinorVersion(int var1) {
+        this.charV = var1;
+    }
+
+    public void setReportDefinition(IReportDefinition var1) {
+        this.gotoV = (ReportDefinition)var1;
+    }
+
+    public void setReportOptions(IReportOptions var1) {
+        if (ControllableHelper.hasEnabledController(this)) {
+            try {
+                IEROMControllerInterface var2 = (IEROMControllerInterface)this.byteV.getControllerInterface();
+                var2.getReportDocumentController().modifyReportOptions(var1);
+            } catch (ReportSDKException var3) {
+                throw new ReportSDKRuntimeException(var3);
+            }
+        }
+
+        if (this.elseV instanceof IControllable) {
+            ((IControllable)this.elseV).getControllableMixin().setControllerInterface((IControllerInterface)null);
+        }
+
+        this.elseV = var1;
+        if (this.byteV.getControllerInterface() != null) {
+            this.byteV.propagateController(this.elseV);
+        }
+
+    }
+
+    public void setPrintOptions(IPrintOptions var1) {
+        this.voidV = var1;
+    }
+
+    public void setSummaryInfo(ISummaryInfo var1) {
+        if (ControllableHelper.hasEnabledController(this)) {
+            try {
+                IEROMControllerInterface var2 = (IEROMControllerInterface)this.byteV.getControllerInterface();
+                ((ReportClientDocument)var2.getReportDocumentController()).modifySummaryInfo(var1);
+            } catch (ReportSDKException var3) {
+                throw new ReportSDKRuntimeException(var3);
+            }
+        }
+
+        if (this.b instanceof IControllable) {
+            ((IControllable)this.b).getControllableMixin().setControllerInterface((IControllerInterface)null);
+        }
+
+        this.b = var1;
+        if (this.byteV.getControllerInterface() != null) {
+            this.byteV.propagateController(this.b);
+        }
+
+    }
+
+    public void startElement(String var1, Map var2, Attributes var3) {
+    }
+
+    public void doControllerModification(Object var1) {
+        assert false : "ReportDocument.doControllerModification should not be called";
+
+    }
+
+    public boolean isDirectlyControllable() {
+        return true;
+    }
+
+    public void enumerateMembers(IMemberVisitor var1) {
+        super.enumerateMembers(var1);
+        this.elseV = (IReportOptions)var1.visit(this.elseV, true);
+        this.b = (ISummaryInfo)var1.visit(this.b, true);
+        this.gotoV = (ReportDefinition)var1.visit(this.gotoV, true);
+    }
+}