directory-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From seelm...@apache.org
Subject svn commit: r689029 - in /directory/studio/trunk: ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/actions/ ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/widgets/entryeditor/ ldapbrowser-...
Date Tue, 26 Aug 2008 10:49:53 GMT
Author: seelmann
Date: Tue Aug 26 03:49:51 2008
New Revision: 689029

URL: http://svn.apache.org/viewvc?rev=689029&view=rev
Log:
o moved OIDDescriptions.properties from ui to core plugin
o added OID value editor (DIRSTUDIO-377)
o made operational attributes always visible for the Root DSE


Added:
    directory/studio/trunk/ldapbrowser-core/src/main/resources/org/apache/directory/studio/ldapbrowser/core/OIDDescriptions.properties
      - copied unchanged from r688923, directory/studio/trunk/ldapbrowser-ui/src/main/resources/org/apache/directory/studio/ldapbrowser/ui/dialogs/properties/OIDDescriptions.properties
    directory/studio/trunk/valueeditors/resources/icons/oideditor.gif   (with props)
    directory/studio/trunk/valueeditors/src/main/java/org/apache/directory/studio/valueeditors/oid/
    directory/studio/trunk/valueeditors/src/main/java/org/apache/directory/studio/valueeditors/oid/InPlaceOidValueEditor.java
Removed:
    directory/studio/trunk/ldapbrowser-ui/src/main/resources/org/apache/directory/studio/ldapbrowser/ui/dialogs/properties/
Modified:
    directory/studio/trunk/ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/actions/CopyAction.java
    directory/studio/trunk/ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/widgets/entryeditor/EntryEditorWidgetContentProvider.java
    directory/studio/trunk/ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/widgets/entryeditor/EntryEditorWidgetFilter.java
    directory/studio/trunk/ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/utils/Utils.java
    directory/studio/trunk/ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/properties/RootDSEPropertyPage.java
    directory/studio/trunk/valueeditors/plugin.xml

Modified: directory/studio/trunk/ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/actions/CopyAction.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/actions/CopyAction.java?rev=689029&r1=689028&r2=689029&view=diff
==============================================================================
--- directory/studio/trunk/ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/actions/CopyAction.java
(original)
+++ directory/studio/trunk/ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/actions/CopyAction.java
Tue Aug 26 03:49:51 2008
@@ -28,8 +28,11 @@
 import org.apache.directory.studio.ldapbrowser.common.dnd.EntryTransfer;
 import org.apache.directory.studio.ldapbrowser.common.dnd.ValuesTransfer;
 import org.apache.directory.studio.ldapbrowser.core.BrowserCoreConstants;
+import org.apache.directory.studio.ldapbrowser.core.model.AttributeHierarchy;
 import org.apache.directory.studio.ldapbrowser.core.model.IAttribute;
+import org.apache.directory.studio.ldapbrowser.core.model.IBookmark;
 import org.apache.directory.studio.ldapbrowser.core.model.IEntry;
+import org.apache.directory.studio.ldapbrowser.core.model.ISearchResult;
 import org.apache.directory.studio.ldapbrowser.core.model.IValue;
 import org.apache.directory.studio.ldifparser.LdifUtils;
 
@@ -116,6 +119,7 @@
     {
         IEntry[] entries = getEntries();
         IValue[] values = getValues();
+        String[] stringProperties = getSelectedProperties();
 
         // entry/searchresult/bookmark
         if ( entries != null )
@@ -137,15 +141,10 @@
         // values
         else if ( values != null )
         {
-
-            // LdifAttrValLine[] lines = new LdifAttrValLine[values.length];
             StringBuffer text = new StringBuffer();
 
             for ( int i = 0; i < values.length; i++ )
             {
-
-                // lines[i] = ModelConverter.valueToLdifAttrValLine(values[i]);
-
                 if ( values[i].isString() )
                 {
                     text.append( values[i].getStringValue() );
@@ -165,6 +164,25 @@
                 { ValuesTransfer.getInstance(), TextTransfer.getInstance() } );
         }
 
+        // string properties
+        else if ( stringProperties != null && stringProperties.length > 0 )
+        {
+            StringBuffer text = new StringBuffer();
+            
+            for ( int i = 0; i < stringProperties.length; i++ )
+            {
+                text.append( stringProperties[i] );
+                if ( i + 1 < stringProperties.length )
+                {
+                    text.append( BrowserCoreConstants.LINE_SEPARATOR );
+                }
+            }
+            
+            copyToClipboard( new Object[]
+                { text.toString() }, new Transfer[]
+                { TextTransfer.getInstance() } );
+        }
+
         // update paste action
         if ( this.pasteActionProxy != null )
         {
@@ -216,6 +234,12 @@
             return true;
         }
 
+        // string properties
+        else if ( getSelectedProperties() != null && getSelectedProperties().length
> 0 )
+        {
+            return true;
+        }
+
         else
         {
             return false;
@@ -236,20 +260,20 @@
             && getSelectedEntries().length + getSelectedSearchResults().length +
getSelectedBookmarks().length > 0 )
         {
 
-            LinkedHashSet entriesSet = new LinkedHashSet();
-            for ( int i = 0; i < getSelectedEntries().length; i++ )
+            LinkedHashSet<IEntry> entriesSet = new LinkedHashSet<IEntry>();
+            for ( IEntry entry : getSelectedEntries() )
             {
-                entriesSet.add( getSelectedEntries()[i] );
+                entriesSet.add( entry );
             }
-            for ( int i = 0; i < this.getSelectedSearchResults().length; i++ )
+            for ( ISearchResult searchResult : getSelectedSearchResults() )
             {
-                entriesSet.add( this.getSelectedSearchResults()[i].getEntry() );
+                entriesSet.add( searchResult.getEntry() );
             }
-            for ( int i = 0; i < this.getSelectedBookmarks().length; i++ )
+            for ( IBookmark bookmark : getSelectedBookmarks() )
             {
-                entriesSet.add( this.getSelectedBookmarks()[i].getEntry() );
+                entriesSet.add( bookmark.getEntry() );
             }
-            return ( IEntry[] ) entriesSet.toArray( new IEntry[entriesSet.size()] );
+            return entriesSet.toArray( new IEntry[entriesSet.size()] );
         }
         else
         {
@@ -271,24 +295,23 @@
             && getSelectedAttributeHierarchies().length + getSelectedAttributes().length
+ getSelectedValues().length > 0 )
         {
 
-            LinkedHashSet valuesSet = new LinkedHashSet();
-            for ( int i = 0; i < this.getSelectedAttributeHierarchies().length; i++ )
+            LinkedHashSet<IValue> valuesSet = new LinkedHashSet<IValue>();
+            for ( AttributeHierarchy ah : getSelectedAttributeHierarchies() )
             {
-                IAttribute[] attributes = getSelectedAttributeHierarchies()[i].getAttributes();
-                for ( int k = 0; k < attributes.length; k++ )
+                for ( IAttribute attribute : ah.getAttributes() )
                 {
-                    valuesSet.addAll( Arrays.asList( attributes[k].getValues() ) );
+                    valuesSet.addAll( Arrays.asList( attribute.getValues() ) );
                 }
             }
-            for ( int i = 0; i < this.getSelectedAttributes().length; i++ )
+            for ( IAttribute attribute : getSelectedAttributes() )
             {
-                valuesSet.addAll( Arrays.asList( this.getSelectedAttributes()[i].getValues()
) );
+                valuesSet.addAll( Arrays.asList( attribute.getValues() ) );
             }
-            for ( int i = 0; i < this.getSelectedValues().length; i++ )
+            for ( IValue value : getSelectedValues() )
             {
-                valuesSet.add( this.getSelectedValues()[i] );
+                valuesSet.add( value );
             }
-            return ( IValue[] ) valuesSet.toArray( new IValue[valuesSet.size()] );
+            return valuesSet.toArray( new IValue[valuesSet.size()] );
         }
         else
         {

Modified: directory/studio/trunk/ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/widgets/entryeditor/EntryEditorWidgetContentProvider.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/widgets/entryeditor/EntryEditorWidgetContentProvider.java?rev=689029&r1=689028&r2=689029&view=diff
==============================================================================
--- directory/studio/trunk/ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/widgets/entryeditor/EntryEditorWidgetContentProvider.java
(original)
+++ directory/studio/trunk/ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/widgets/entryeditor/EntryEditorWidgetContentProvider.java
Tue Aug 26 03:49:51 2008
@@ -31,6 +31,7 @@
 import org.apache.directory.studio.ldapbrowser.core.model.AttributeHierarchy;
 import org.apache.directory.studio.ldapbrowser.core.model.IAttribute;
 import org.apache.directory.studio.ldapbrowser.core.model.IEntry;
+import org.apache.directory.studio.ldapbrowser.core.model.IRootDSE;
 import org.apache.directory.studio.ldapbrowser.core.model.IValue;
 import org.eclipse.jface.viewers.ITreeContentProvider;
 import org.eclipse.jface.viewers.Viewer;
@@ -177,7 +178,8 @@
         List<Object> valueList = new ArrayList<Object>();
         for ( IAttribute attribute : attributes )
         {
-            if ( !attribute.isOperationalAttribute() || showOperationalAttributes )
+            if ( !attribute.isOperationalAttribute() || showOperationalAttributes
+                || ( attribute.getEntry() instanceof IRootDSE ) )
             {
                 IValue[] values = attribute.getValues();
                 if ( this.preferences == null || !this.preferences.isUseFolding()

Modified: directory/studio/trunk/ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/widgets/entryeditor/EntryEditorWidgetFilter.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/widgets/entryeditor/EntryEditorWidgetFilter.java?rev=689029&r1=689028&r2=689029&view=diff
==============================================================================
--- directory/studio/trunk/ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/widgets/entryeditor/EntryEditorWidgetFilter.java
(original)
+++ directory/studio/trunk/ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/widgets/entryeditor/EntryEditorWidgetFilter.java
Tue Aug 26 03:49:51 2008
@@ -22,6 +22,7 @@
 
 
 import org.apache.directory.studio.ldapbrowser.core.model.IAttribute;
+import org.apache.directory.studio.ldapbrowser.core.model.IRootDSE;
 import org.apache.directory.studio.ldapbrowser.core.model.IValue;
 import org.eclipse.jface.viewers.TreeViewer;
 import org.eclipse.jface.viewers.Viewer;
@@ -110,19 +111,19 @@
             // filter attribute types
             if ( value.getAttribute().isObjectClassAttribute() )
             {
-                return isShowObjectClassAttribute();
+                return isShowObjectClassAttribute() || ( value.getAttribute().getEntry()
instanceof IRootDSE );
             }
             else if ( value.getAttribute().isMustAttribute() )
             {
-                return isShowMustAttributes();
+                return isShowMustAttributes() || ( value.getAttribute().getEntry() instanceof
IRootDSE );
             }
             else if ( value.getAttribute().isMayAttribute() )
             {
-                return isShowMayAttributes();
+                return isShowMayAttributes() || ( value.getAttribute().getEntry() instanceof
IRootDSE );
             }
             else if ( value.getAttribute().isOperationalAttribute() )
             {
-                return isShowOperationalAttributes();
+                return isShowOperationalAttributes() || ( value.getAttribute().getEntry()
instanceof IRootDSE );
             }
             else
             {

Modified: directory/studio/trunk/ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/utils/Utils.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/utils/Utils.java?rev=689029&r1=689028&r2=689029&view=diff
==============================================================================
--- directory/studio/trunk/ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/utils/Utils.java
(original)
+++ directory/studio/trunk/ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/utils/Utils.java
Tue Aug 26 03:49:51 2008
@@ -31,12 +31,14 @@
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
 import java.util.Set;
 
-import org.apache.directory.shared.ldap.util.LdapURL;
 import org.apache.directory.shared.ldap.name.AttributeTypeAndValue;
 import org.apache.directory.shared.ldap.name.LdapDN;
 import org.apache.directory.shared.ldap.name.Rdn;
+import org.apache.directory.shared.ldap.util.LdapURL;
 import org.apache.directory.studio.connection.core.ConnectionParameter.EncryptionMethod;
 import org.apache.directory.studio.ldapbrowser.core.BrowserCoreConstants;
 import org.apache.directory.studio.ldapbrowser.core.BrowserCorePlugin;
@@ -59,6 +61,45 @@
 public class Utils
 {
 
+    public static ResourceBundle oidDescriptions = null;
+    // Load RessourceBundle with OID descriptions
+    static
+    {
+        try
+        {
+            oidDescriptions = ResourceBundle.getBundle( "org.apache.directory.studio.ldapbrowser.core.OIDDescriptions"
);
+        }
+        catch ( Exception e )
+        {
+            e.printStackTrace();
+        }
+    }
+
+
+    /**
+     * Gets the textual OID description for the given numeric OID.
+     * 
+     * @param oid the numeric OID
+     * 
+     * @return the OID description, null if the numeric OID is unknown
+     */
+    public static String getOidDescription( String oid )
+    {
+        if ( oidDescriptions != null )
+        {
+            try
+            {
+                String description = oidDescriptions.getString( oid );
+                return description;
+            }
+            catch ( MissingResourceException ignored )
+            {
+            }
+        }
+        return null;
+    }
+
+
     /**
      * Transforms the given DN into a normalized String, usable by the schema cache.
      * The following transformations are performed:
@@ -396,7 +437,6 @@
      */
     public static LdifChangeModifyRecord computeDiff( IEntry t0, IEntry t1 )
     {
-        // TODO: binary
         LdifChangeModifyRecord record = LdifChangeModifyRecord.create( t0.getDn().getUpName()
);
 
         // check which attributes/values must be deleted

Modified: directory/studio/trunk/ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/properties/RootDSEPropertyPage.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/properties/RootDSEPropertyPage.java?rev=689029&r1=689028&r2=689029&view=diff
==============================================================================
--- directory/studio/trunk/ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/properties/RootDSEPropertyPage.java
(original)
+++ directory/studio/trunk/ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/properties/RootDSEPropertyPage.java
Tue Aug 26 03:49:51 2008
@@ -24,13 +24,12 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
 
 import org.apache.directory.studio.connection.core.Connection;
+import org.apache.directory.studio.ldapbrowser.common.actions.CopyAction;
+import org.apache.directory.studio.ldapbrowser.common.actions.proxy.EntryEditorActionProxy;
 import org.apache.directory.studio.ldapbrowser.common.widgets.BaseWidgetUtils;
 import org.apache.directory.studio.ldapbrowser.common.widgets.entryeditor.EntryEditorWidgetTableMetadata;
-import org.apache.directory.studio.ldapbrowser.core.BrowserConnectionManager;
 import org.apache.directory.studio.ldapbrowser.core.BrowserCorePlugin;
 import org.apache.directory.studio.ldapbrowser.core.model.IAttribute;
 import org.apache.directory.studio.ldapbrowser.core.model.IBrowserConnection;
@@ -38,7 +37,12 @@
 import org.apache.directory.studio.ldapbrowser.core.model.IRootDSE;
 import org.apache.directory.studio.ldapbrowser.core.model.IValue;
 import org.apache.directory.studio.ldapbrowser.core.model.impl.RootDSE;
+import org.apache.directory.studio.ldapbrowser.core.utils.Utils;
+import org.apache.directory.studio.utils.ActionUtils;
 import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
 import org.eclipse.jface.viewers.ArrayContentProvider;
 import org.eclipse.jface.viewers.IStructuredContentProvider;
 import org.eclipse.jface.viewers.ITableLabelProvider;
@@ -56,6 +60,7 @@
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Menu;
 import org.eclipse.swt.widgets.TabFolder;
 import org.eclipse.swt.widgets.TabItem;
 import org.eclipse.swt.widgets.Table;
@@ -80,22 +85,6 @@
 
     private TabItem rawTab;
 
-    public static ResourceBundle oidDescriptions = null;
-    // Load RessourceBundle with OID descriptions
-    static
-    {
-        try
-        {
-            oidDescriptions = ResourceBundle
-                .getBundle( "org.apache.directory.studio.ldapbrowser.ui.dialogs.properties.OIDDescriptions"
);
-        }
-        catch ( Exception e )
-        {
-            e.printStackTrace();
-        }
-    }
-
-
     public RootDSEPropertyPage()
     {
         super();
@@ -191,7 +180,7 @@
         this.controlsTab = new TabItem( this.tabFolder, SWT.NONE );
         this.controlsTab.setText( "Controls" );
         this.controlsTab.setControl( controlsComposite );
-
+        
         Composite extensionComposite = new Composite( this.tabFolder, SWT.NONE );
         extensionComposite.setLayoutData( new RowData( 10, 10 ) );
         GridLayout extensionLayout = new GridLayout();
@@ -461,18 +450,12 @@
      */
     private void addDescritionsToOIDs( String[] oids )
     {
-        if ( oidDescriptions != null )
+        for ( int i = 0; i < oids.length; ++i )
         {
-            for ( int i = 0; i < oids.length; ++i )
+            String description = Utils.getOidDescription( oids[i] );
+            if ( description != null )
             {
-                try
-                {
-                    String description = oidDescriptions.getString( oids[i] );
-                    oids[i] = oids[i] + " (" + description + ")";
-                }
-                catch ( MissingResourceException ignored )
-                {
-                }
+                oids[i] = oids[i] + " (" + description + ")";
             }
         }
     }

Modified: directory/studio/trunk/valueeditors/plugin.xml
URL: http://svn.apache.org/viewvc/directory/studio/trunk/valueeditors/plugin.xml?rev=689029&r1=689028&r2=689029&view=diff
==============================================================================
--- directory/studio/trunk/valueeditors/plugin.xml (original)
+++ directory/studio/trunk/valueeditors/plugin.xml Tue Aug 26 03:49:51 2008
@@ -51,6 +51,17 @@
           name="Administrative Role Editor">
        <attribute attributeType="administrativeRole"/>
     </valueEditor>
+    <valueEditor
+          class="org.apache.directory.studio.valueeditors.oid.InPlaceOidValueEditor"
+          icon="resources/icons/oideditor.gif"
+          name="OID Editor">
+       <syntax
+             syntaxOID="1.3.6.1.4.1.1466.115.121.1.38">
+       </syntax>
+       <syntax
+             syntaxOID="1.3.6.1.4.1.18060.0.4.0.0.2">
+       </syntax>
+    </valueEditor>
    </extension>
 
 </plugin>

Added: directory/studio/trunk/valueeditors/resources/icons/oideditor.gif
URL: http://svn.apache.org/viewvc/directory/studio/trunk/valueeditors/resources/icons/oideditor.gif?rev=689029&view=auto
==============================================================================
Binary file - no diff available.

Propchange: directory/studio/trunk/valueeditors/resources/icons/oideditor.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: directory/studio/trunk/valueeditors/src/main/java/org/apache/directory/studio/valueeditors/oid/InPlaceOidValueEditor.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/valueeditors/src/main/java/org/apache/directory/studio/valueeditors/oid/InPlaceOidValueEditor.java?rev=689029&view=auto
==============================================================================
--- directory/studio/trunk/valueeditors/src/main/java/org/apache/directory/studio/valueeditors/oid/InPlaceOidValueEditor.java
(added)
+++ directory/studio/trunk/valueeditors/src/main/java/org/apache/directory/studio/valueeditors/oid/InPlaceOidValueEditor.java
Tue Aug 26 03:49:51 2008
@@ -0,0 +1,61 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *  
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License. 
+ *  
+ */
+
+package org.apache.directory.studio.valueeditors.oid;
+
+
+import org.apache.directory.studio.ldapbrowser.core.model.IValue;
+import org.apache.directory.studio.ldapbrowser.core.utils.Utils;
+import org.apache.directory.studio.valueeditors.AbstractInPlaceStringValueEditor;
+
+
+/**
+ * Implementation of IValueEditor for syntax 1.3.6.1.4.1.1466.115.121.1.38 
+ * (OID syntax). 
+ * 
+ * Currently only the getDisplayXXX() methods are implemented.
+ * For modification the raw string must be edited.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class InPlaceOidValueEditor extends AbstractInPlaceStringValueEditor
+{
+
+    /**
+     * {@inheritDoc}
+     */
+    public String getDisplayValue( IValue value )
+    {
+        String displayValue = super.getDisplayValue( value );
+
+        if ( !showRawValues() )
+        {
+            String description = Utils.getOidDescription( displayValue );
+            if ( description != null )
+            {
+                displayValue = displayValue + " (" + description + ")";
+            }
+        }
+
+        return displayValue;
+    }
+
+}



Mime
View raw message