Correct way to obtain AppModule from ManagedBean?

hi,
There are many posts on this forum and others in the net with examples on how to obtain an AppModule from a ManagedBean (some of them uses depecrated methods, like using ValueBinding). But what's the correct way to do so?
Is this the correct one ?
HttpServletRequest request =
     (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
HttpSession session = request.getSession(true);
BindingContext ctx = (BindingContext)session.getAttribute("data");
DataControl control = ctx.findDataControl("InstelAMDataControl");
ApplicationModule appModule = (ApplicationModule)control.getDataProvider();
Thanks!
Roger

Roger,
this is one possible way to get the ApplicationModule inside a bean.
you can do this via an EL too
            FacesContext facesContext = FacesContext.getCurrentInstance();
            Application app = facesContext.getApplication();
            ExpressionFactory elFactory = app.getExpressionFactory();
            ELContext elContext = facesContext.getELContext();
            ValueExpression valueExp =  elFactory.createValueExpression(elContext, expression, Object.class);
            ApplicationModule am = (ApplicationModule)  valueExp.getValue("#{data." + YourApplicationModuleName + ".dataProvider}");This is essential the same, but uses an EL to get the data provider.
It's more a philosophical question if there is aright way to do it.
Timo

Similar Messages

  • Correct Way to Obtain The Most Negative Double

    Is this the correct way to obtain the most negative double in Java?
    double v = -Double.MAX_VALUE;As Max positive byte is 127, but Max negative byte is -128, not -127
            byte c = 127;
            byte nc = (byte)(c + 1);
            if (nc > c) {
                System.out.println("+ve");
            else {
                // Come here.
                System.out.println("-ve");
            }However, how about double
    double v =Double.MAX_VALUE + 1;
    Is this makes sense? As, 1 is not the smallest increment unit for double.

    yccheok wrote:
    Is this the correct way to obtain the most negative double in Java?
    double v = -Double.MAX_VALUE;
    Double.MIN_VALUE;
    However, how about double
    double v =Double.MAX_VALUE + 1;
    Is this makes sense? As, 1 is not the smallest increment unit for double.No, 1 is not the smallest unit to increment a double with, the smallest unit of course would be negative infinity. Remember double has a fixed precision, so even if negative infinity existed, it would not be accurately represented by a double.
    Mel

  • Is there any way to obtain time from an NTP server in LabView?

    I would like to be able to obtain time from and NTP server and then use that to set the time on a PCI IRIG-B card. I haven't been able to find any LabView documentation indicating if this is possible or not through LabView.

    Check: Code library -> Browse by Company -> NASA -> Timesync.
    It's a NIST time syncronizer. I never checked it myself, but NIST has NTP servers so this may help you on your way.

  • Correct Way to Pass Data from Main VI to Sub VI

    I'm currently working on a program that consists of a main VI which passes in several inputs to numerous copies of the same subVI which are displayed in subpanels. As you may know, in order to display a subVI in a subpanel, a reference to the subVI must be passed into the "Insert VI" property node of the subpanel. However, I am unsure as to what is the proper way in which I can generate this reference from the subVI block on the block diagram of the main VI. Note that in my case, it is insufficient to simply generate a reference to the subVI by pointing to the file path of the subVI and opening an instance of it, because that instance of the subVI must also receive input from the main VI. Generating a reference in this way does not, as far as I know, allow the main VI to interface with the subVI.
    I had thought that I developed a solution to this problem by extracting a reference to the current instance of the subVI from the "Owning VI" property node of any control or display in the subVI. This works well for about 12 hours of program execution. However, after that point, the program starts highlighting the "Insert VI" property node every time the subVI is updated. Furthermore, the main VI seems to often lose the reference to the subVI and becomes unable to start, especially after the subVI has been edited. Given these two problems, this solution clearly is not a proper solution.
    Could anybody advise on how to properly generate a reference to an instance of a subVI that receives input from a main VI?
    Any suggestions would be appreciated.

    Griffon2-6 wrote:
    I've figured that out too - set the "Option" input on the "Open VI Reference" block to 0x8.  
    Great!
    Thats the way to go. Keep digging around and you will find solutions in the LabVIEW Help or on the forums for most of the things.
    When you set the open VI reference option to 0x08, you can obtain reference to different instances of the same VI, so that you can pass different data and let them run separately.
    Griffon2-6 wrote:
    However, now I've discovered that the inputs from the main VI are not being passed to the subVI instances as the program is running. Does passing control values via invoke nodes allow for real-time data transfer?
    I have one question. You said you are calling this sub VI in a sub panel? How many subpanels do you have and why are you calling the reentrant vi in differnet sub panels?
    Could you post your code?
    (If a post helped you sove the problem, mark it as solution. That will help us identify and track the solutions for different issues.)

  • What is The correct way to remove duplicates from the iTunes library?

    I have a 300GB external drive which over the last 5 years has got bloated with duplicate tracks.
    If I use the show duplicates option, I see 10,479 songs totalling over 50GB. Now, those songs that are shown, do they include the original that they are a duplicate of, or are they JUST the duplicates?
    I have been sorely tempted to select all and delete to the trash, but I want to be 100% sure I don't delete any originals. Also, there are some duplicate tracks that are genuine dupes, for example, I have an original LP with a particular track on it, but then that exact track appears on a compilation LP, so I don't want to remove the compilation LP tracks as then the compilation is incomplete.
    I have Tidy Up installed, but I'm a bit wary to use it as I want to be 10% sure I do the right thing, it's a lot of money to lose, and I'm a DJ, so this is thousands of conversions from my vinyl collection and stuff purchased and ripped from CD.
    I see many methods of getting rid of duplicates but no definitive answer for someone in my position.
    Many thanks all!

    Akuwa wrote:
    This is supposed to be a fix to the result from SQL. Currently no access to the SQL code so we have to fix in he Java code...Then really, whoever said you couldn't change the SQL has absolutely no right to turn around and demand the fastest way to remove the duplicates in Java. It's almost certain that the fastest way to remove the duplicates would be for the SQL not to select them in the first place, so if you don't permit changing the SQL then it's clear you aren't interested in the fastest way.

  • What is the correct way to transfer data from old hard drive to new Crucial SSD on a mid 2010 13" MBP

    I just bought an Crucial M550 256GB for my mid 2010 MBP. And I'm not clear on the data transfer instructions.
    1) it came with Acronis instalation kit with a blank CD and a usb cable. I'm not sure what this CD is used for?
    2) is it best to install the SSD with a fresh OSX download and then just use time machine to load all my previous settings?
    3) or do I partition the SSD before I install it in the MBP and transfer using a clone?
    Not sure what to do here...

    Well, I am not familiar with the Crucial kit you got - you might want to ask them about that blank CD...... however, I did install an SSD and this is what I did:
    I ordered a kit from OWC which included an external USB hard drive enclosure and tools. When it arrived, I first installed it in the external enclosre, hooked it to my MBP and then used CarbonCopyCloner to make a full bootable clone of my system on the new SSD after formatting it to Mac OS Extended (Journaled) and the GUID partition scheme. I then uninstalled the internal, installed the SSD in its place (following the install video availabe at OWC) and booted up - that was it. I installed the old internal drive into the external enclosure for an instantaneous bootable cbackup.

  • Correct way to do SSO

    Hi,
    I am trying to include an JAVA system into ABAP system.
    I have some doubts in here:
    1> What is the correct way to export certificate from JAVA stack, using NWA(.der file) or using VIsual Admin(.crt file)?
         When I import the certificate, exported using Visual Admin i.e. crt file, into ABAP stack, I dont see any acknowledgement symbol(red,yellow or green) beneath their entries in SSO2.
    2> while adding the JAVA certificate in the ACL list of ABAP system, what do i put in system SID and client fileds, when the other system is pure JAVA?
    what is the significance of including the client in there?
    3> Is it important to create the certificate of a system itself in ABAP system and then add it into ACL list too?
    Kindly help....

    Hi Chilbul,
    Kindly have a look into the below links.Hope these links will help you out.
    http://help.sap.com/saphelp_nw70/helpdata/en/45/ec25370fdc3481e10000000a1553f6/content.htm
    http://help.sap.com/saphelp_nw72/helpdata/en/74/642441cd87a12be10000000a1550b0/content.htm
    http://sap10.blogspot.com/2009/07/enable-sap-single-sign-on-on-windows.html
    Thanks & Regards
    Ajitabh

  • Sample java code to obtain data from ALUI directory

    Hi
    I need to go to the ALUI LDAP ( directory ) services to get user profile information.
    The documentation did not help me to figure out the way to obtain data from it.
    so , it would be a great help if some one could share the sample java code api to obtain data from ALUI directory.

    i'm guessing you are asking to get the groups for a particular user. someone in the other thread posted the actual SQL, that may be easier. ( you are on 10gR3 right, because ALUI directory didn't exist before 6.5)
    I dont have a sample done yet, but the internet is filled with samples of java and ldap...
    http://www.coderanch.com/t/133108/Security/LDAP-sample-program

  • I purchased photoshop elements 8 on line in 2010. I recently switched to a new desktop computer. Photoshop asked for my serial number. I entered the correct serial number (obtained from Adobe). It says it is invalid. How do I get this corrected so I can u

    I purchased photoshop elements 8 on line in 2010. I recently switched to a new desktop computer. Photoshop asked for my serial number. I entered the correct serial number (obtained from Adobe). It says it is invalid. How do I get this corrected so I can use the product I purchased?

    Hi Rosera,
    This is bad and I am sorry to hear that you are running into these issues.
    Let me connect with you, so right now, the current state is that you have installed copy of PSE 8 in trial on your windows 7 machine, and when you are trying to enter the serial number from your PSE 8 Box, it is saying the serial number to be invalid?
    It might sound pretty obvious, but please make sure that you are entering the serial number correctly and of PSE 8(in case you bought a PEPE box)?
    Have you tried the steps mentioned below by Barbara?
    If possible, you can send me the serial number through PRIVATE MESSAGE and I can check it on my end that whether the serial number is indeed invalid or that the issue is with your machine?
    Regards,
    Ankush

  • Correct way to restore from Time Machine backup - Lion clean install

    I did a clean install of Lion, and am wondering — what's the correct way to restore files in my Home folder to my new installation?
    For example, I simply dragged over my iTunes folder from the "Latest" Time Machine backup.
    Perhaps instead I should restore from the backup differently? For example, open the ~/Music folder, then open Time Machine.app, and restore that folder through that?
    I always thought that manually dragging the "Latest" backup from the disk should do the trick the same way? Or an important question is — can some files be somehow excluded?
    I did everything through dragging, and haven't noticed problems... BUT, perhaps I should go back and re-do everything the "right" way if there is one?
    (I purposefully avoided doing a Restore, as I didn't want any of the caches, Applications and Library items restored — wanted to start fresh.)

    For convenience mostly. I use the Terminal a lot so I have lots of "dot files" that are at the root of my home directory and hidden.
    One problem is that many of those programs have data in Music, Photos, etc all organized by databases somewhere in ~/Library. You have to make sure to get them re-joined. It can be done. You just have to be careful with it. If you lose your iPhoto archive in the process, the first thing someone is going to ask is why didn't you use Migration Assistant.
    Until recently, I performed all my major MacOS X upgrades using this manual procedure and, for me, the extra hassle was worth the cleanliness. I have lost a couple of software registration codes that I couldn't ever get back. C'est la vie. I would keep my old Library folder around for quite some time until I was sure I wouldn't need anything out of it. These days, I'm too busy and too lazy. I just use one of the automatic methods.

  • What is the Text Book correct way to do a spot uv merging multiple applications and exporting from 1

    I am unsuccesssfully finishing a project using Spot UV and about to start another.  I want to start this one out the Text Book correct way.  Here are the details.
    I have logo's coming from Illustrator that I want to have a spot UV on
    I have photos coming from photoshop that I want a spot UV on
    I have a design element in In Design that I want a spot UV on
    What is the Correct way to get everything into In Design have it output to a PDF that a printer could use and a second one that I could use for the Web that does not show the spot uv
    A note is that the last project I followed all the tutorials on the web that say to use channels in photoshop to make my spot UV that in the end I think is causing me a lot of headaces right now. 
    Thanks in advance

    Put the spot UV on its own layer in InDesign. Turn it off for the web version of the PDF.
    Bob

  • Correct way bounce a master mix from Logic?

    I've been trying to bounce a master mix straight from Logic using AdLimiter (and in some cases multipressor) in the master output. I must be doing something wrong, because I always end up with totally mashed, pumping and overdriven bounced mixes, even with just a 2-3 dB AdLimiter gains.
    I've previously used setup on PC where I bounced a dry mix, loaded the bounced mix to Soundforge (or similar editor), normalized to 0dB, then added Waves C4 and L1 (in that order) and used maybe 5dB gain with L1. Then render.. and that way I got a nice loud "master mix".
    I now don't have access to waves plugins nor an external wave editor. So I figured I could do pretty much the same in Logic, if I monitor the mix, so that the master output doesn't clip, but peaks stays at around -0.5dB, so that I don't really need to normalize. Then I add Multipressor and AdLimiter in that order and start tweaking. But I'm not doing something right here, because now I get a very quiet (and limited?) signal, because I have previously had to lower the master output volume to prevent clipping. Any gain over 1dB I do to AdLimiter makes the mix sound like crap. Plus the whole mix is now -6dB or so, because of the previous volume limiting to prevent clipping.
    That was a bit of a long story, but I hope someone understands the question I tried to ask.
    But in short, I'd like to bounce a nice mix which is compressed and limited to be around -5 to -7 dB louder than the original mix. What is the correct way to do this?
    Thanks!

    But in short, I'd like to bounce a nice mix which is
    compressed and limited to be around -5 to -7 dB
    louder than the original mix. What is the correct way
    to do this?
    You might want to check out other mastering plugins. I'm not a big fan of the AdLimiter. Universal Audio's UAD1 (http://www.uaudio.com/) with the Precision Limiter gives very nice results. There are also some nice compressors available for the UAD1. Another possibility is buying the waves L3 to do the limiting, but this plugin is relatively expensive. Both options aren't cheap, though, but they will give better results than the Adlimiter.
    by the way: Audacity (http://audacity.sourceforge.net/) is a nice freeware audio editor. Nothing fancy, but it works.

  • Is there a way to obtain a thumbnail from a video in Lightroom?

    Is there a way to obtain a thumbnail from a video in Lightroom? i.e. a small jpeg file.

    I just remembered that there is an undocumented module LrPhotoPictureView:
    http://forums.adobe.com/message/4140432#4140432
    In a quick test, it shows a thumbnail for .mov files in the catalog:
    Shows a 400 x 400 thumbnail for the selected file.
    local Require = require 'Require'.path ("../common")
    local Debug = require 'Debug'.init ()
    require 'strict'
    local LrApplication = import 'LrApplication'
    local LrDialogs = import 'LrDialogs'
    local LrFunctionContext = import 'LrFunctionContext'
    local LrPhotoPictureView = import 'LrPhotoPictureView'
    local LrView = import 'LrView'
    local showErrors = Debug.showErrors
    local function main (context)
        local f = LrView.osFactory()
        local catalog = LrApplication.activeCatalog ()
        local photo = catalog:getTargetPhoto ()
        if #photo == nil then
            LrDialogs.message ("No photo selected")
            return
            end
        local pictureView = LrPhotoPictureView.makePhotoPictureView ({
              width = 400, height = 400, photo = catalog:getTargetPhoto ()})
        local result = LrDialogs.presentModalDialog {
            title = "Thumbnail test", contents = f:column {
                f:static_text {title = photo:getFormattedMetadata ("fileName")},
                pictureView}}
        end
    LrFunctionContext.postAsyncTaskWithContext ("test",
        showErrors (function (context) main (context) end))

  • Correct way to upgrade from LP 8 to 9 with all the extra content?

    I know that Apple has moved around the default folders for Apple Loops and extra audio content with different versions of Logic. When upgrading from a full install of LP8 to LP9, what is the correct way to do that. I'm worried I may get duplicate Apple Loops etc.
    Should I just run the installer and install all 9 discs to the default settings, or do I need to pay attention to which folders the extra audio content goes? I'm seeing a scenario where the Jam Packs from LP8 are in a different folder than the default for LP9 and so will get installed a second time.

    Thank you for your reply. So the jam Packs are identical to LP8? Then I can skip thoseI have a pretty good idea of where the actual files are located. So I should be able to figure it out.
    How can I the make sure that every file on the disk is actually in the loop browser , and to avoid duplicates? Over the years as directories have been changed for GB and LP, it's been quite confusing, especially since I already had some Jam Packs and also Soundtrack Pro and corresponding Loops before they became part of LP and some other Loop packages. Is it really as easy as deleting everything in the Loop Browser and then dragging all the folders from the HD in there?

  • Is there a way to extract information from a registered schema ?

    Hello,
    with the aid of the XSOM project in java.net, and using the following after I loaded the appropriate jars and creating the wrapper PL/SQL
    CREATE OR REPLACE AND RESOLVE JAVA SOURCE NAMED GMS10.XSOMNAVIGATOR AS
    import java.util.Vector;
    import com.sun.xml.xsom.XSComplexType;
    import com.sun.xml.xsom.XSElementDecl;
    import com.sun.xml.xsom.XSFacet;
    import com.sun.xml.xsom.XSModelGroup;
    import com.sun.xml.xsom.XSModelGroupDecl;
    import com.sun.xml.xsom.XSParticle;
    import com.sun.xml.xsom.XSRestrictionSimpleType;
    import com.sun.xml.xsom.XSSimpleType;
    import com.sun.xml.xsom.XSTerm;
    import com.sun.xml.xsom.parser.XSOMParser;
    public class XSOMNavigator
        public static class SimpleTypeRestriction
            public String[] enumeration = null;
            public String   maxValue    = null;
            public String   minValue    = null;
            public String   length      = null;
            public String   maxLength   = null;
            public String   minLength   = null;
            public String[] pattern     = null;
            public String   totalDigits = null;
            public String toString()
                String enumValues = "";
                if (enumeration != null)
                    for(String val : enumeration)
                        enumValues += val + ", ";
                    enumValues = enumValues.substring(0, enumValues.lastIndexOf(','));
                String patternValues = "";
                if (pattern != null)
                    for(String val : pattern)
                        patternValues += "(" + val + ")|";
                    patternValues = patternValues.substring(0, patternValues.lastIndexOf('|'));
                String retval = "";
                retval += maxValue    == null ? "" : "[MaxValue  = "   + maxValue      + "]\t";
                retval += minValue    == null ? "" : "[MinValue  = "   + minValue      + "]\t";
                retval += maxLength   == null ? "" : "[MaxLength = "   + maxLength     + "]\t";
                retval += minLength   == null ? "" : "[MinLength = "   + minLength     + "]\t";
                retval += pattern     == null ? "" : "[Pattern(s) = "  + patternValues + "]\t";
                retval += totalDigits == null ? "" : "[TotalDigits = " + totalDigits   + "]\t";
                retval += length      == null ? "" : "[Length = "      + length        + "]\t";         
                retval += enumeration == null ? "" : "[Values = "      + enumValues    + "]\t";
                return retval;
        private static void initRestrictions(XSSimpleType xsSimpleType, SimpleTypeRestriction simpleTypeRestriction)
            XSRestrictionSimpleType restriction = xsSimpleType.asRestriction();
            if (restriction != null)
                Vector<String> enumeration = new Vector<String>();
                Vector<String> pattern     = new Vector<String>();
                for (XSFacet facet : restriction.getDeclaredFacets())
                    if (facet.getName().equals(XSFacet.FACET_ENUMERATION))
                        enumeration.add(facet.getValue().value);
                    if (facet.getName().equals(XSFacet.FACET_MAXINCLUSIVE))
                        simpleTypeRestriction.maxValue = facet.getValue().value;
                    if (facet.getName().equals(XSFacet.FACET_MININCLUSIVE))
                        simpleTypeRestriction.minValue = facet.getValue().value;
                    if (facet.getName().equals(XSFacet.FACET_MAXEXCLUSIVE))
                        simpleTypeRestriction.maxValue = String.valueOf(Integer.parseInt(facet.getValue().value) - 1);
                    if (facet.getName().equals(XSFacet.FACET_MINEXCLUSIVE))
                        simpleTypeRestriction.minValue = String.valueOf(Integer.parseInt(facet.getValue().value) + 1);
                    if (facet.getName().equals(XSFacet.FACET_LENGTH))
                        simpleTypeRestriction.length = facet.getValue().value;
                    if (facet.getName().equals(XSFacet.FACET_MAXLENGTH))
                        simpleTypeRestriction.maxLength = facet.getValue().value;
                    if (facet.getName().equals(XSFacet.FACET_MINLENGTH))
                        simpleTypeRestriction.minLength = facet.getValue().value;
                    if (facet.getName().equals(XSFacet.FACET_PATTERN))
                        pattern.add(facet.getValue().value);
                    if (facet.getName().equals(XSFacet.FACET_TOTALDIGITS))
                        simpleTypeRestriction.totalDigits = facet.getValue().value;
                if (enumeration.size() > 0)
                    simpleTypeRestriction.enumeration = enumeration.toArray(new String[] {});
                if (pattern.size() > 0)
                    simpleTypeRestriction.pattern = pattern.toArray(new String[] {});
        private static void printParticle(XSParticle particle, String occurs, String absPath, String indent)
            occurs = "  MinOccurs = " + particle.getMinOccurs() + ", MaxOccurs = " + particle.getMaxOccurs();
            XSTerm term = particle.getTerm();
            if (term.isModelGroup())
                printGroup(term.asModelGroup(), occurs, absPath, indent);   
            else if(term.isModelGroupDecl())
                printGroupDecl(term.asModelGroupDecl(), occurs, absPath, indent);   
            else if (term.isElementDecl())
                printElement(term.asElementDecl(), occurs, absPath, indent);
            else
        private static void printGroup(XSModelGroup modelGroup, String occurs, String absPath, String indent)
            System.out.println(indent + "[Start of " + modelGroup.getCompositor() + occurs + "]" );
            for (XSParticle particle : modelGroup.getChildren())
                printParticle(particle, occurs, absPath, indent + "\t");
            System.out.println(indent + "[End of " + modelGroup.getCompositor() + "]");
        private static void printGroupDecl(XSModelGroupDecl modelGroupDecl, String occurs, String absPath, String indent)
            System.out.println(indent + "[Group " + modelGroupDecl.getName() + occurs + "]");
            printGroup(modelGroupDecl.getModelGroup(), occurs, absPath, indent);
        private static void printComplexType(XSComplexType complexType, String occurs, String absPath, String indent)
            System.out.println();
            XSParticle particle = complexType.getContentType().asParticle();
            if (particle != null)
                printParticle(particle, occurs, absPath, indent);
        private static void printSimpleType(XSSimpleType simpleType, String occurs, String absPath, String indent)
            SimpleTypeRestriction restriction = new SimpleTypeRestriction();
            initRestrictions(simpleType, restriction);
            System.out.println(restriction.toString());
        private static void printElement(XSElementDecl element, String occurs, String absPath, String indent)
            absPath += "/" + element.getName();
            System.out.print(indent + "[Element " + absPath + "   " + occurs + "] of type [" + element.getType().getBaseType().getName() + "]");
            if (element.getType().isComplexType())
                printComplexType(element.getType().asComplexType(), occurs, absPath, indent);
            else
                printSimpleType(element.getType().asSimpleType(), occurs, absPath, indent);
        public static void xsomNavigate(String xsdFile, String rootElement)
            String occurs  = "";
            String absPath = "";
            String indent  = "";
            try
                XSOMParser parser = new XSOMParser();
                parser.parse(xsdFile);
                printElement(parser.getResult().getSchema(1).getElementDecl(rootElement), occurs, absPath, indent);
            catch (Exception exp)
                exp.printStackTrace(System.out);
    /I obtained the following (correct) result
    [Element /CD026A   ] of type [anyType]
    [Start of sequence  MinOccurs = 1, MaxOccurs = 1]
         [Group HEADER  MinOccurs = 1, MaxOccurs = 1]
         [Start of sequence  MinOccurs = 1, MaxOccurs = 1]
              [Element /CD026A/SynIdeMES1     MinOccurs = 1, MaxOccurs = 1] of type [string][Values = UNOC]     
              [Element /CD026A/SynVerNumMES2     MinOccurs = 1, MaxOccurs = 1] of type [string][Values = 3]     
              [Element /CD026A/MesSenMES3     MinOccurs = 1, MaxOccurs = 1] of type [string][MaxLength = 70]     
              [Element /CD026A/SenIdeCodQuaMES4     MinOccurs = 0, MaxOccurs = 1] of type [string][MaxLength = 4]     
              [Element /CD026A/MesRecMES6     MinOccurs = 1, MaxOccurs = 1] of type [string][MaxLength = 35]     
              [Element /CD026A/RecIdeCodQuaMES7     MinOccurs = 0, MaxOccurs = 1] of type [string][MaxLength = 4]     
              [Element /CD026A/DatOfPreMES9     MinOccurs = 1, MaxOccurs = 1] of type [nonNegativeInteger][Pattern(s) = ([1-2][0-9]{3}[0][1-9][0][1-9])|([1-2][0-9]{3}[0][1-9][1|2][0-9])|([1-2][0-9]{3}[0][1-9][3][0|1])|([1-2][0-9]{3}[1][0-2][0][1-9])|([1-2][0-9]{3}[1][0-2][1|2][0-9])|([1-2][0-9]{3}[1][0-2][3][0|1])|([0-9]{2}[0][1-9][0][1-9])|([0-9]{2}[0][1-9][1|2][0-9])|([0-9]{2}[0][1-9][3][0|1])|([0-9]{2}[1][0-2][0][1-9])|([0-9]{2}[1][0-2][1|2][0-9])|([0-9]{2}[1][0-2][3][0|1])]     
              [Element /CD026A/TimOfPreMES10     MinOccurs = 1, MaxOccurs = 1] of type [string][Pattern(s) = ([0-1]{1}[0-9]{1}[0-5]{1}[0-9]{1})|([2]{1}[0-3]{1}[0-5]{1}[0-9]{1})]     [Length = 4]     
              [Element /CD026A/IntConRefMES11     MinOccurs = 1, MaxOccurs = 1] of type [string][MaxLength = 14]     
              [Element /CD026A/RecRefMES12     MinOccurs = 0, MaxOccurs = 1] of type [string][MaxLength = 14]     
              [Element /CD026A/RecRefQuaMES13     MinOccurs = 0, MaxOccurs = 1] of type [string][Length = 2]     
              [Element /CD026A/AppRefMES14     MinOccurs = 0, MaxOccurs = 1] of type [string][MaxLength = 14]     
              [Element /CD026A/PriMES15     MinOccurs = 0, MaxOccurs = 1] of type [string][MaxLength = 1]     
              [Element /CD026A/AckReqMES16     MinOccurs = 0, MaxOccurs = 1] of type [nonNegativeInteger][Values = 0, 1]     
              [Element /CD026A/ComAgrIdMES17     MinOccurs = 0, MaxOccurs = 1] of type [string][MaxLength = 35]     
              [Element /CD026A/TesIndMES18     MinOccurs = 0, MaxOccurs = 1] of type [nonNegativeInteger][Values = 0, 1]     
              [Element /CD026A/MesIdeMES19     MinOccurs = 1, MaxOccurs = 1] of type [string][MaxLength = 14]     
              [Element /CD026A/MesTypMES20     MinOccurs = 1, MaxOccurs = 1] of type [string][Values = CC004A, CC005A, CC007A, CC008A, CC009A, CC013A, CC014A, CC015A, CC016A, CC017A, CC019A, CC021A, CC023A, CC025A, CC026A, CC028A, CC029A, CC035A, CC043A, CC044A, CC045A, CC051A, CC054A, CC055A, CC058A, CC060A, CC062A, CC100A, CC102A, CC103A, CC224A, CC225A, CC228A, CC229A, CC231A, CC907A, CC917A, CD001A, CD002A, CD003A, CD006A, CD010A, CD018A, CD020A, CD024A, CD027A, CD030A, CD031A, CD032A, CD033A, CD034A, CD037A, CD038A, CD050A, CD059A, CD063A, CD104A, CD105A, CD106A, CD111A, CD112A, CD114A, CD115A, CD118A, CD200A, CD201A, CD203A, CD204A, CD205A, CD209A, CD411A, CD901A, CD904A, CD905A, CD906A, CD907A, CD912A, CD913A, CD914A, CD916A, CD931A, CD932A, AT004A, AT005A, AT007A, AT008A, AT009A, AT013A, AT014A, AT015A, AT016A, AT017A, AT019A, AT021A, AT023A, AT025A, AT026A, AT028A, AT029A, AT035A, AT043A, AT044A, AT045A, AT051A, AT054A, AT055A, AT058A, AT060A, AT062A, AT100A, AT102A, AT103A, AT224A, AT225A, AT228A, AT229A, AT231A, AT907A, AT917A, BE004A, BE005A, BE007A, BE008A, BE009A, BE013A, BE014A, BE015A, BE016A, BE017A, BE019A, BE021A, BE023A, BE025A, BE026A, BE028A, BE029A, BE035A, BE043A, BE044A, BE045A, BE051A, BE054A, BE055A, BE058A, BE060A, BE062A, BE100A, BE102A, BE103A, BE224A, BE225A, BE228A, BE229A, BE231A, BE907A, BE917A, CY004A, CY005A, CY007A, CY008A, CY009A, CY013A, CY014A, CY015A, CY016A, CY017A, CY019A, CY021A, CY023A, CY025A, CY026A, CY028A, CY029A, CY035A, CY043A, CY044A, CY045A, CY051A, CY054A, CY055A, CY058A, CY060A, CY062A, CY100A, CY102A, CY103A, CY224A, CY225A, CY228A, CY229A, CY231A, CY907A, CY917A, CZ004A, CZ005A, CZ007A, CZ008A, CZ009A, CZ013A, CZ014A, CZ015A, CZ016A, CZ017A, CZ019A, CZ021A, CZ023A, CZ025A, CZ026A, CZ028A, CZ029A, CZ035A, CZ043A, CZ044A, CZ045A, CZ051A, CZ054A, CZ055A, CZ058A, CZ060A, CZ062A, CZ100A, CZ102A, CZ103A, CZ224A, CZ225A, CZ228A, CZ229A, CZ231A, CZ907A, CZ917A, DE004A, DE005A, DE007A, DE008A, DE009A, DE013A, DE014A, DE015A, DE016A, DE017A, DE019A, DE021A, DE023A, DE025A, DE026A, DE028A, DE029A, DE035A, DE043A, DE044A, DE045A, DE051A, DE054A, DE055A, DE058A, DE060A, DE062A, DE100A, DE102A, DE103A, DE224A, DE225A, DE228A, DE229A, DE231A, DE907A, DE917A, DK004A, DK005A, DK007A, DK008A, DK009A, DK013A, DK014A, DK015A, DK016A, DK017A, DK019A, DK021A, DK023A, DK025A, DK026A, DK028A, DK029A, DK035A, DK043A, DK044A, DK045A, DK051A, DK054A, DK055A, DK058A, DK060A, DK062A, DK100A, DK102A, DK103A, DK224A, DK225A, DK228A, DK229A, DK231A, DK907A, DK917A, EE004A, EE005A, EE007A, EE008A, EE009A, EE013A, EE014A, EE015A, EE016A, EE017A, EE019A, EE021A, EE023A, EE025A, EE026A, EE028A, EE029A, EE035A, EE043A, EE044A, EE045A, EE051A, EE054A, EE055A, EE058A, EE060A, EE062A, EE100A, EE102A, EE103A, EE224A, EE225A, EE228A, EE229A, EE231A, EE907A, EE917A, ES004A, ES005A, ES007A, ES008A, ES009A, ES013A, ES014A, ES015A, ES016A, ES017A, ES019A, ES021A, ES023A, ES025A, ES026A, ES028A, ES029A, ES035A, ES043A, ES044A, ES045A, ES051A, ES054A, ES055A, ES058A, ES060A, ES062A, ES100A, ES102A, ES103A, ES224A, ES225A, ES228A, ES229A, ES231A, ES907A, ES917A, FI004A, FI005A, FI007A, FI008A, FI009A, FI013A, FI014A, FI015A, FI016A, FI017A, FI019A, FI021A, FI023A, FI025A, FI026A, FI028A, FI029A, FI035A, FI043A, FI044A, FI045A, FI051A, FI054A, FI055A, FI058A, FI060A, FI062A, FI100A, FI102A, FI103A, FI224A, FI225A, FI228A, FI229A, FI231A, FI907A, FI917A, FR004A, FR005A, FR007A, FR008A, FR009A, FR013A, FR014A, FR015A, FR016A, FR017A, FR019A, FR021A, FR023A, FR025A, FR026A, FR028A, FR029A, FR035A, FR043A, FR044A, FR045A, FR051A, FR054A, FR055A, FR058A, FR060A, FR062A, FR100A, FR102A, FR103A, FR224A, FR225A, FR228A, FR229A, FR231A, FR907A, FR917A, GB004A, GB005A, GB007A, GB008A, GB009A, GB013A, GB014A, GB015A, GB016A, GB017A, GB019A, GB021A, GB023A, GB025A, GB026A, GB028A, GB029A, GB035A, GB043A, GB044A, GB045A, GB051A, GB054A, GB055A, GB058A, GB060A, GB062A, GB100A, GB102A, GB103A, GB224A, GB225A, GB228A, GB229A, GB231A, GB907A, GB917A, GF004A, GF005A, GF007A, GF008A, GF009A, GF013A, GF014A, GF015A, GF016A, GF017A, GF019A, GF021A, GF023A, GF025A, GF026A, GF028A, GF029A, GF035A, GF043A, GF044A, GF045A, GF051A, GF054A, GF055A, GF058A, GF060A, GF062A, GF100A, GF102A, GF103A, GF224A, GF225A, GF228A, GF229A, GF231A, GF907A, GF917A, GP004A, GP005A, GP007A, GP008A, GP009A, GP013A, GP014A, GP015A, GP016A, GP017A, GP019A, GP021A, GP023A, GP025A, GP026A, GP028A, GP029A, GP035A, GP043A, GP044A, GP045A, GP051A, GP054A, GP055A, GP058A, GP060A, GP062A, GP100A, GP102A, GP103A, GP224A, GP225A, GP228A, GP229A, GP231A, GP907A, GP917A, GR004A, GR005A, GR007A, GR008A, GR009A, GR013A, GR014A, GR015A, GR016A, GR017A, GR019A, GR021A, GR023A, GR025A, GR026A, GR028A, GR029A, GR035A, GR043A, GR044A, GR045A, GR051A, GR054A, GR055A, GR058A, GR060A, GR062A, GR100A, GR102A, GR103A, GR224A, GR225A, GR228A, GR229A, GR231A, GR907A, GR917A, HU004A, HU005A, HU007A, HU008A, HU009A, HU013A, HU014A, HU015A, HU016A, HU017A, HU019A, HU021A, HU023A, HU025A, HU026A, HU028A, HU029A, HU035A, HU043A, HU044A, HU045A, HU051A, HU054A, HU055A, HU058A, HU060A, HU062A, HU100A, HU102A, HU103A, HU224A, HU225A, HU228A, HU229A, HU231A, HU907A, HU917A, IE004A, IE005A, IE007A, IE008A, IE009A, IE013A, IE014A, IE015A, IE016A, IE017A, IE019A, IE021A, IE023A, IE025A, IE026A, IE028A, IE029A, IE035A, IE043A, IE044A, IE045A, IE051A, IE054A, IE055A, IE058A, IE060A, IE062A, IE100A, IE102A, IE103A, IE224A, IE225A, IE228A, IE229A, IE231A, IE907A, IE917A, IT004A, IT005A, IT007A, IT008A, IT009A, IT013A, IT014A, IT015A, IT016A, IT017A, IT019A, IT021A, IT023A, IT025A, IT026A, IT028A, IT029A, IT035A, IT043A, IT044A, IT045A, IT051A, IT054A, IT055A, IT058A, IT060A, IT062A, IT100A, IT102A, IT103A, IT224A, IT225A, IT228A, IT229A, IT231A, IT907A, IT917A, LT004A, LT005A, LT007A, LT008A, LT009A, LT013A, LT014A, LT015A, LT016A, LT017A, LT019A, LT021A, LT023A, LT025A, LT026A, LT028A, LT029A, LT035A, LT043A, LT044A, LT045A, LT051A, LT054A, LT055A, LT058A, LT060A, LT062A, LT100A, LT102A, LT103A, LT224A, LT225A, LT228A, LT229A, LT231A, LT907A, LT917A, LU004A, LU005A, LU007A, LU008A, LU009A, LU013A, LU014A, LU015A, LU016A, LU017A, LU019A, LU021A, LU023A, LU025A, LU026A, LU028A, LU029A, LU035A, LU043A, LU044A, LU045A, LU051A, LU054A, LU055A, LU058A, LU060A, LU062A, LU100A, LU102A, LU103A, LU224A, LU225A, LU228A, LU229A, LU231A, LU907A, LU917A, LV004A, LV005A, LV007A, LV008A, LV009A, LV013A, LV014A, LV015A, LV016A, LV017A, LV019A, LV021A, LV023A, LV025A, LV026A, LV028A, LV029A, LV035A, LV043A, LV044A, LV045A, LV051A, LV054A, LV055A, LV058A, LV060A, LV062A, LV100A, LV102A, LV103A, LV224A, LV225A, LV228A, LV229A, LV231A, LV907A, LV917A, MC004A, MC005A, MC007A, MC008A, MC009A, MC013A, MC014A, MC015A, MC016A, MC017A, MC019A, MC021A, MC023A, MC025A, MC026A, MC028A, MC029A, MC035A, MC043A, MC044A, MC045A, MC051A, MC054A, MC055A, MC058A, MC060A, MC062A, MC100A, MC102A, MC103A, MC224A, MC225A, MC228A, MC229A, MC231A, MC907A, MC917A, MQ004A, MQ005A, MQ007A, MQ008A, MQ009A, MQ013A, MQ014A, MQ015A, MQ016A, MQ017A, MQ019A, MQ021A, MQ023A, MQ025A, MQ026A, MQ028A, MQ029A, MQ035A, MQ043A, MQ044A, MQ045A, MQ051A, MQ054A, MQ055A, MQ058A, MQ060A, MQ062A, MQ100A, MQ102A, MQ103A, MQ224A, MQ225A, MQ228A, MQ229A, MQ231A, MQ907A, MQ917A, MT004A, MT005A, MT007A, MT008A, MT009A, MT013A, MT014A, MT015A, MT016A, MT017A, MT019A, MT021A, MT023A, MT025A, MT026A, MT028A, MT029A, MT035A, MT043A, MT044A, MT045A, MT051A, MT054A, MT055A, MT058A, MT060A, MT062A, MT100A, MT102A, MT103A, MT224A, MT225A, MT228A, MT229A, MT231A, MT907A, MT917A, NL004A, NL005A, NL007A, NL008A, NL009A, NL013A, NL014A, NL015A, NL016A, NL017A, NL019A, NL021A, NL023A, NL025A, NL026A, NL028A, NL029A, NL035A, NL043A, NL044A, NL045A, NL051A, NL054A, NL055A, NL058A, NL060A, NL062A, NL100A, NL102A, NL103A, NL224A, NL225A, NL228A, NL229A, NL231A, NL907A, NL917A, PL004A, PL005A, PL007A, PL008A, PL009A, PL013A, PL014A, PL015A, PL016A, PL017A, PL019A, PL021A, PL023A, PL025A, PL026A, PL028A, PL029A, PL035A, PL043A, PL044A, PL045A, PL051A, PL054A, PL055A, PL058A, PL060A, PL062A, PL100A, PL102A, PL103A, PL224A, PL225A, PL228A, PL229A, PL231A, PL907A, PL917A, PT004A, PT005A, PT007A, PT008A, PT009A, PT013A, PT014A, PT015A, PT016A, PT017A, PT019A, PT021A, PT023A, PT025A, PT026A, PT028A, PT029A, PT035A, PT043A, PT044A, PT045A, PT051A, PT054A, PT055A, PT058A, PT060A, PT062A, PT100A, PT102A, PT103A, PT224A, PT225A, PT228A, PT229A, PT231A, PT907A, PT917A, RE004A, RE005A, RE007A, RE008A, RE009A, RE013A, RE014A, RE015A, RE016A, RE017A, RE019A, RE021A, RE023A, RE025A, RE026A, RE028A, RE029A, RE035A, RE043A, RE044A, RE045A, RE051A, RE054A, RE055A, RE058A, RE060A, RE062A, RE100A, RE102A, RE103A, RE224A, RE225A, RE228A, RE229A, RE231A, RE907A, RE917A, SE004A, SE005A, SE007A, SE008A, SE009A, SE013A, SE014A, SE015A, SE016A, SE017A, SE019A, SE021A, SE023A, SE025A, SE026A, SE028A, SE029A, SE035A, SE043A, SE044A, SE045A, SE051A, SE054A, SE055A, SE058A, SE060A, SE062A, SE100A, SE102A, SE103A, SE224A, SE225A, SE228A, SE229A, SE231A, SE907A, SE917A, SI004A, SI005A, SI007A, SI008A, SI009A, SI013A, SI014A, SI015A, SI016A, SI017A, SI019A, SI021A, SI023A, SI025A, SI026A, SI028A, SI029A, SI035A, SI043A, SI044A, SI045A, SI051A, SI054A, SI055A, SI058A, SI060A, SI062A, SI100A, SI102A, SI103A, SI224A, SI225A, SI228A, SI229A, SI231A, SI907A, SI917A, SK004A, SK005A, SK007A, SK008A, SK009A, SK013A, SK014A, SK015A, SK016A, SK017A, SK019A, SK021A, SK023A, SK025A, SK026A, SK028A, SK029A, SK035A, SK043A, SK044A, SK045A, SK051A, SK054A, SK055A, SK058A, SK060A, SK062A, SK100A, SK102A, SK103A, SK224A, SK225A, SK228A, SK229A, SK231A, SK907A, SK917A, CH004A, CH005A, CH007A, CH008A, CH009A, CH013A, CH014A, CH015A, CH016A, CH017A, CH019A, CH021A, CH023A, CH025A, CH026A, CH028A, CH029A, CH035A, CH043A, CH044A, CH045A, CH051A, CH054A, CH055A, CH058A, CH060A, CH062A, CH100A, CH102A, CH103A, CH224A, CH225A, CH228A, CH229A, CH231A, CH907A, CH917A, IS004A, IS005A, IS007A, IS008A, IS009A, IS013A, IS014A, IS015A, IS016A, IS017A, IS019A, IS021A, IS023A, IS025A, IS026A, IS028A, IS029A, IS035A, IS043A, IS044A, IS045A, IS051A, IS054A, IS055A, IS058A, IS060A, IS062A, IS100A, IS102A, IS103A, IS224A, IS225A, IS228A, IS229A, IS231A, IS907A, IS917A, NO004A, NO005A, NO007A, NO008A, NO009A, NO013A, NO014A, NO015A, NO016A, NO017A, NO019A, NO021A, NO023A, NO025A, NO026A, NO028A, NO029A, NO035A, NO043A, NO044A, NO045A, NO051A, NO054A, NO055A, NO058A, NO060A, NO062A, NO100A, NO102A, NO103A, NO224A, NO225A, NO228A, NO229A, NO231A, NO907A, NO917A, SJ004A, SJ005A, SJ007A, SJ008A, SJ009A, SJ013A, SJ014A, SJ015A, SJ016A, SJ017A, SJ019A, SJ021A, SJ023A, SJ025A, SJ026A, SJ028A, SJ029A, SJ035A, SJ043A, SJ044A, SJ045A, SJ051A, SJ054A, SJ055A, SJ058A, SJ060A, SJ062A, SJ100A, SJ102A, SJ103A, SJ224A, SJ225A, SJ228A, SJ229A, SJ231A, SJ907A, SJ917A]     
              [Element /CD026A/ComAccRefMES21     MinOccurs = 0, MaxOccurs = 1] of type [string][MaxLength = 35]     
              [Element /CD026A/MesSeqNumMES22     MinOccurs = 0, MaxOccurs = 1] of type [nonNegativeInteger][TotalDigits = 2]     
              [Element /CD026A/FirAndLasTraMES23     MinOccurs = 0, MaxOccurs = 1] of type [string][Values = F, L]     
         [End of sequence]
         [Element /CD026A/TRAPRIPC1     MinOccurs = 1, MaxOccurs = 1] of type [anyType]
         [Start of sequence  MinOccurs = 1, MaxOccurs = 1]
              [Element /CD026A/TRAPRIPC1/TINPC159     MinOccurs = 1, MaxOccurs = 1] of type [string][MaxLength = 17]     
         [End of sequence]
         [Element /CD026A/CUSTOFFGUARNT     MinOccurs = 1, MaxOccurs = 1] of type [anyType]
         [Start of sequence  MinOccurs = 1, MaxOccurs = 1]
              [Element /CD026A/CUSTOFFGUARNT/RefNumRNT1     MinOccurs = 1, MaxOccurs = 1] of type [string][Length = 8]     
         [End of sequence]
         [Element /CD026A/GUAREF2     MinOccurs = 1, MaxOccurs = 1] of type [anyType]
         [Start of sequence  MinOccurs = 1, MaxOccurs = 1]
              [Element /CD026A/GUAREF2/GuaRefNumGRNREF21     MinOccurs = 1, MaxOccurs = 1] of type [string][MaxLength = 24]     
              [Element /CD026A/GUAREF2/ACCDOC728     MinOccurs = 0, MaxOccurs = 99] of type [anyType]
              [Start of sequence  MinOccurs = 1, MaxOccurs = 1]
                   [Element /CD026A/GUAREF2/ACCDOC728/AccCodCOD729     MinOccurs = 1, MaxOccurs = 1] of type [string][Length = 4]     
              [End of sequence]
              [Element /CD026A/GUAREF2/ACCDOCPC4     MinOccurs = 1, MaxOccurs = 1] of type [anyType]
              [Start of sequence  MinOccurs = 1, MaxOccurs = 1]
                   [Element /CD026A/GUAREF2/ACCDOCPC4/AccCodPC41     MinOccurs = 1, MaxOccurs = 1] of type [string][Length = 4]     
              [End of sequence]
              [Element /CD026A/GUAREF2/ACCCODPC3     MinOccurs = 1, MaxOccurs = 1] of type [anyType]
              [Start of sequence  MinOccurs = 1, MaxOccurs = 1]
                   [Element /CD026A/GUAREF2/ACCCODPC3/AccCodPC31     MinOccurs = 1, MaxOccurs = 1] of type [string][Length = 4]     
              [End of sequence]
         [End of sequence]
    [End of sequence]I still thing this is a bit of an overkill, but I will use it as a last resort in order to substitute the built-in parser so I can collect all the errors of an XML source in one go.
    Is there a way to obtain the same information from the XDB registry where my schemas will reside ? If yes, I will gladly substitute this Java class with whatever your suggestion is :)
    If not, I intend to store the extracted information in suitably constructed database tables and use a PL/SQL procedure to do the validation by traversing the table information accordingly (XPath by XPath) collecting the errors as I traverse the XML. Hopefully, due to the XPaths being very targeted towards the information that will be checked, I will avoid the DOM memory tree overhead.
    Finally, if I follow the path I described, is there a way to put some sort of trigger for the cases of copyEvolve(), inPlaceEvolve() and drop-and-reinsert so that my process will be called again for the new data ?
    Apologies for the lengthy code and result set.
    Best Regards
    Philip
    PS: I did not include the XSD file itself because it includes another four XSDs. If needed I will do it in a reply post though ...

    Good morning Marco,
    I am back at the office today, so I am trying to catch up with everything.
    If I remember though, RESOURCE_VIEW and PATH_VIEW are related to the "exploration" of the XDB registry (but I may very well be wrong !).
    What I want is to retrieve schema information (if XDB actually shreds the XML schema on registration) like elements paths, simple and complex type contents, sequence information, particle occurence information, groups and group declarations etc.
    I think it makes sense that Oracle stores these somewhere, since it uses the information on OR storage to generate types and tables anyway ;) That is of course if the whole OR shredding is not done totally on-the-fly...
    I managed to get clearance to release partial information about some of the schemas and their related documentation, so I will be passing them to you and Mark through private emails (of course) in order to give you a clearer understanding of the whole project.
    Just give me a day to write a few pages that explain how the whole operation is performed.
    Best Regards
    Philip

Maybe you are looking for

  • Powerbook is giving me the Mac version of BSOD, even after reformat!

    Hey everyone. Wish I could say I was a happy poster. I've been using Macs since I was 6, and was psyched to get a Powerbook last June for college. It worked flawlessly up until winter break, when it started getting all these weird crashes that became

  • How do I get Photoshop and Illustrator side-by-side with dual monitors?

    I currently have my dock on the left side of my left monitor and my menu bar is at the top of my right monitor. I would like to be able to have photoshop and illustrator side-by-side (one in each monitor). Is this possible? Thank you!

  • Problem with Movie Artwork

    I am using iTunes 10.4.1. Itunes library is on external drive. Artwork is only displayed for some movies .... until I select (not play) a particular movie ... then the artwork is displayed. Artwork is shown correctly on all movies if I select "Get In

  • Spam in email sub-account

    I do not use any explicit spam protection tools other than what comes automatically with my Verizon DSL email service.  My primary user account gets no spam, but a sub-account is flooded with spam daily.  How can I extend anti-spam protection to the

  • How was this done?

    see the effect on the name I'm referring to the name coming in on the top left, you will see it skewed then swing out like a gate and stop I tried every which way to skew and scale to get a transition to look like this and I find that the skew allows