Examples of RbConfig


Examples of com.taobao.eclipse.plugin.reviewboard.core.config.RbConfig

    @Override
    protected void createPreOrPostInfo(Composite composite){
       
        composite.setLayoutData(new GridData(GridData.FILL_BOTH));
       
        RbConfig rbConfig = RbConfigReader.getRbConfig(null);
        if( rbConfig.isAllowCompareVersionForPreCommit() ){
            Group groupRequsetInfo = new Group(composite, SWT.FULL_SELECTION);
            GridLayout layoutGroupPropertiesDefault = new GridLayout();
            layoutGroupPropertiesDefault.numColumns = 3;
            groupRequsetInfo.setLayout(layoutGroupPropertiesDefault);
            groupRequsetInfo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
View Full Code Here

Examples of com.taobao.eclipse.plugin.reviewboard.core.config.RbConfig

        mainPage.setDescription(pageDescriptionSB.toString());
       
        requestOptionInfoWizardPage = new RequestOptionInfoWizardPage();
       
        addPage(mainPage);
        RbConfig rbConfig = RbConfigReader.getRbConfig(null);
        if( rbConfig.isAllowOptionalPageCommit() ){
            addPage(requestOptionInfoWizardPage);
        }
    }
View Full Code Here

Examples of com.taobao.eclipse.plugin.reviewboard.core.config.RbConfig

                        e.getMessage() ); //$NON-NLS-1$
                return false;
            }
           
            //临时编码解决方案。请以方法参数方式提供
            RbConfig rbConfig = RbConfigReader.getRbConfig(null);
            if( null != rbConfig.getCharsetEncoding() && !rbConfig.getCharsetEncoding().trim().equals(CHARSET_AUTO) ){
                boolean isAcceptCharset = MessageDialog.openConfirm(getShell(),
                        RbSubclipseMessages.getString("WARNING_LABLE"),
                        MessageFormat.format(RbSubclipseMessages.getString("CHECK_DIFF_0"),
                                new Object[]{ rbConfig.getCharsetEncoding(), CHARSET_AUTO }));
                if(!isAcceptCharset){
                    return false;
                }
            }
           
            SVNRevision compareVersion = null;
            if( mainPage.getStartVersion() > 0 ){
                compareVersion = new SVNRevision.Number(mainPage.getStartVersion());
            }
            GeneratePreCommitDiffOperation generateDiffFileOperation = new GeneratePreCommitDiffOperation(
                    mainPageSelectedResources, unaddedAllResourceList, null, getShell(), compareVersion );
            getContainer().run(true, true, generateDiffFileOperation);
            fileDiffs = generateDiffFileOperation.getFileDiffs();
            Map<String, StringBuilder> diffContentSBByCharset = generateDiffFileOperation.getDiffContentSBByCharset();
            if( null != diffContentSBByCharset && !diffContentSBByCharset.isEmpty() && diffContentSBByCharset.size() > 1){
                boolean isConfirm = MessageDialog.openConfirm(getShell(),
                        RbSubclipseMessages.getString("WARNING_LABLE"),
                        RbSubclipseMessages.getString("PROMPTING_ENCODING_0"));
                if(!isConfirm){
                    return false;
                }
            }
           
            if( null == fileDiffs || fileDiffs.length == 0 ){
                //未发现差异,无需提交信息到ReviewBoard。
                MessageDialog.openInformation(
                        getShell(),
                        Policy.bind("GenerateSVNDiff.noDiffsFoundTitle"), //$NON-NLS-1$
                        Policy.bind("GenerateSVNDiff.noDiffsFoundMsg")); //$NON-NLS-1$
                return false;
            }

            //提交信息到ReviewBoard服务器
            if( null == reviewboardClient ){
                MessageDialog.openError(getShell(),
                        RbSubclipseMessages.getString("ERROR_INFORMATION_LABLE"),
                        RbSubclipseMessages.getString("ERROR_SERVER_REQURIED")); //$NON-NLS-1$
                return false;
            }
           
            ModelReviewRequest reviewRequest = null;
            //如果是修改
            if(mainPage.isUpdate()){
                //先查找出
                reviewRequest = mainPage.getReviewRequest();
                //设置额外信息
                if( rbConfig.isAllowOptionalPageCommit() ){
                    requestOptionInfoWizardPage.setReviewRequestOptionalInfo(reviewRequest);
                }
            }else{//如果是新增
                reviewRequest = mainPage.getReviewRequest();
                //设置额外信息
                if( rbConfig.isAllowOptionalPageCommit() ){
                    requestOptionInfoWizardPage.setReviewRequestOptionalInfo(reviewRequest);
                }
            }
           
            if( null != reviewRequest
View Full Code Here

Examples of com.taobao.eclipse.plugin.reviewboard.core.config.RbConfig

     * Allow the user to chose to save the patch to the workspace or outside
     * of the workspace.
     */
    public void createControlDetail(Composite composite) {
       
        RbConfig rbConfig = RbConfigReader.getRbConfig(null);
       
        createPreOrPostInfo(composite);
       
        GridLayout layout= new GridLayout();
       
        GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
       
        Group groupSummary = new Group(composite, SWT.NONE);
        layout = new GridLayout();
        layout.numColumns = 2;
        groupSummary.setLayout(layout);
        groupSummary.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        groupSummary.setText(RbSubclipseMessages.getString("PAGE_SUMMARY"));

        Label lblSummary = new Label(groupSummary, SWT.NONE);
        lblSummary.setText(RbSubclipseMessages.getString("PAGE_SUMMARY"));
        txtSummary = new Text(groupSummary, SWT.BORDER);
        gridData = new GridData(SWT.FILL, SWT.CENTER, true, false);
        gridData.widthHint= 0;
        gridData.heightHint= SWT.DEFAULT;
        gridData.horizontalSpan= 1;
        txtSummary.setLayoutData(gridData);
       
        Group groupAttribute = new Group(composite, SWT.NONE);
        layout = new GridLayout();
        layout.numColumns = 4;
        groupAttribute.setLayout(layout);
        gridData = new GridData(GridData.FILL_HORIZONTAL);
        groupAttribute.setLayoutData( gridData );
        groupAttribute.setText(RbSubclipseMessages.getString("PAGE_ATTRIBUTES"));
       
        Label lblRepository = new Label(groupAttribute, SWT.NONE);
        lblRepository.setText(RbSubclipseMessages.getString("PAGE_REPOSITORIES"));

        Label lblRepositoryValue = new Label(groupAttribute, SWT.NONE);
        ModelRepository repository = this.getSelectedRepository();
        if( null == repository ){
            lblRepositoryValue.setText("");
        }else{
            lblRepositoryValue.setText(repository.getName());
        }
       
        if( rbConfig.isAllowOptionBugClosed() ){
            Label lblTmp = new Label(groupAttribute, SWT.NONE);
            lblTmp.setText("");
            lblTmp = new Label(groupAttribute, SWT.NONE);
            lblTmp.setText("");
        }
       
        Label lblGroup = new Label(groupAttribute, SWT.NONE);
        lblGroup.setText(RbSubclipseMessages.getString("PAGE_GROUPS"));
        txtGroup = new Text(groupAttribute, SWT.BORDER);
        gridData = new GridData(SWT.FILL, SWT.CENTER, true, false);
        gridData.widthHint= 0;
        gridData.heightHint= SWT.DEFAULT;
        gridData.horizontalSpan= 1;
        txtGroup.setLayoutData(gridData);
        txtGroupCompleteField = new AutoCompleteField(txtGroup, new TextContentAdapter(), new String[] {});
        txtGroupCompleteField.setProposals( reviewGroupNameList.toArray(new String[reviewGroupNameList.size()]) );
        txtGroup.addModifyListener(new ModifyListener() {
            public void modifyText(ModifyEvent e) {
                List<String> proposalTmp = getNewListForProposal( reviewGroupNameList, txtGroup.getText() );
                txtGroupCompleteField.setProposals( proposalTmp.toArray(new String[proposalTmp.size()]) );
            }
        });
       
        Label lblBranch = new Label(groupAttribute, SWT.NONE);
        lblBranch.setText(RbSubclipseMessages.getString("PAGE_BRANCHES"));
        textBranch = new Text(groupAttribute, SWT.BORDER);
        gridData = new GridData(SWT.FILL, SWT.CENTER, true, false);
        gridData.widthHint= 0;
        gridData.heightHint= SWT.DEFAULT;
        gridData.horizontalSpan= 1;
        textBranch.setLayoutData(gridData);
        textBranch.setEnabled(false);
       
        Label lblPeople = new Label(groupAttribute, SWT.NONE);
        lblPeople.setText(RbSubclipseMessages.getString("PAGE_REVIEWPEOPLES"));
        txtPeople = new Text(groupAttribute, SWT.BORDER);
        gridData = new GridData(SWT.FILL, SWT.CENTER, true, false);
        gridData.widthHint= 0;
        gridData.heightHint= SWT.DEFAULT;
        gridData.horizontalSpan= 1;
        txtPeople.setLayoutData(gridData);
        txtPeopleCompleteField = new AutoCompleteField(txtPeople, new TextContentAdapter(), new String[] {});
        txtPeopleCompleteField.setProposals( userNameList.toArray(new String[userNameList.size()]) );
        txtPeople.addModifyListener(new ModifyListener() {
            public void modifyText(ModifyEvent e) {
                List<String> proposalTmp = getNewListForProposal( userNameList, txtPeople.getText() );
                txtPeopleCompleteField.setProposals( proposalTmp.toArray(new String[proposalTmp.size()]) );
            }
        });
        if( rbConfig.isAllowOptionBugClosed() ){
            Label lblBugsClosed = new Label(groupAttribute, SWT.NONE);
            lblBugsClosed.setText(RbSubclipseMessages.getString("PAGE_BUGCLOSED"));
           
            textBugsClosed = new Text(groupAttribute, SWT.BORDER);
            gridData = new GridData(SWT.FILL, SWT.CENTER, true, false);
            gridData.widthHint= 0;
            gridData.heightHint= SWT.DEFAULT;
            gridData.horizontalSpan= 1;
            textBugsClosed.setLayoutData(gridData);
            textBugsClosed.addVerifyListener(new VerifyListener() {
                public void verifyText(VerifyEvent e) {
                    //检查输入的字符是否为数字0123456789,不在则返回-1
                    boolean b=("0123456789,".indexOf(e.text)>=0);
                    e.doit=b;//其含义是如果doit==true,则允许输入,否则不允许
                }
            });
        }
       
        Group groupRequestDescrible = new Group(composite, SWT.NONE);
        layout = new GridLayout();
        layout.numColumns = 1;
        groupRequestDescrible.setLayout(layout);
        GridData gdGroupRequestDescrible = new GridData(GridData.FILL_HORIZONTAL);
        gdGroupRequestDescrible.horizontalSpan = 1;
        groupRequestDescrible.setLayoutData(gdGroupRequestDescrible);
        groupRequestDescrible.setText(RbSubclipseMessages.getString("PAGE_DESCRIPTION"));
       
        txtDescription = new Text(groupRequestDescrible, SWT.BORDER | SWT.MULTI);
        gridData = new GridData(SWT.FILL, SWT.CENTER, true, false);
        gridData.widthHint= 0;
        gridData.heightHint= 50;
        gridData.horizontalSpan= 1;
        txtDescription.setLayoutData(gridData);
       
        comboDescriptionHistory = new Combo(groupRequestDescrible, SWT.READ_ONLY);
        //comboDescriptionHistory.setVisibleItemCount( RecentDescriptionBeanListManager.MAX_SIZE + 1 );
        comboDescriptionHistory.setVisibleItemCount( 11 );
        gridData = new GridData(SWT.FILL, SWT.CENTER, true, false);
        gridData.widthHint= 0;
        gridData.heightHint= SWT.DEFAULT;
        gridData.horizontalSpan= 1;
        comboDescriptionHistory.setLayoutData(gridData);
        List<RecentDescriptionBean> recentDescriptionBeanList = RecentDescriptionBeansManager.getSingletonInstance().getRecentDescriptionBeanList();
        int recentDescriptionBeanIndex = 0;
        for( RecentDescriptionBean recentDescriptionBean : recentDescriptionBeanList ){
            comboDescriptionHistory.add( recentDescriptionBean.getDescriptionShortContent() );
            //comboDescriptionHistory.add( recentDescriptionBean.getDecriptionContent() );
            comboDescriptionHistory.setData(String.valueOf(recentDescriptionBeanIndex),recentDescriptionBean);
            recentDescriptionBeanIndex++ ;
        }
        comboDescriptionHistory.select(0);
        comboDescriptionHistory.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                if( comboDescriptionHistory.getSelectionIndex() == 0 ){
                    return ;
                }
                String key=String.valueOf(comboDescriptionHistory.getSelectionIndex());
                RecentDescriptionBean recentDescriptionBeanSelected= (RecentDescriptionBean)comboDescriptionHistory.getData(key);
                if( null != recentDescriptionBeanSelected && null != recentDescriptionBeanSelected.getDecriptionContent()){
                    txtDescription.setText( recentDescriptionBeanSelected.getDecriptionContent() );
                }
            }
        });
       
        Group groupRequsetInfo = new Group(composite, SWT.NONE);
        layout= new GridLayout();
        layout.numColumns = 7;
        groupRequsetInfo.setLayout(layout);
        gridData = new GridData(GridData.FILL_HORIZONTAL);
        groupRequsetInfo.setLayoutData(gridData);
        groupRequsetInfo.setText(RbSubclipseMessages.getString("PAGE_UPDATE_REQUEST"));
        btnUpdateOrCommit = new Button(groupRequsetInfo, SWT.CHECK);
        btnUpdateOrCommit.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                btnUpdateOrCommitChanged();
            }
        });
        btnUpdateOrCommit.setToolTipText(RbSubclipseMessages.getString("PAGE_UPDATE_REQUEST"));
        btnUpdateOrCommit.setText(RbSubclipseMessages.getString("PAGE_UPDATE_REQUEST"));
        Label lblRequestId = new Label(groupRequsetInfo, SWT.NONE);
        lblRequestId.setText(RbSubclipseMessages.getString("PAGE_UPDATE_REQUEST_ID"));
       
        textRequestId = new Text(groupRequsetInfo, SWT.BORDER);
        textRequestId.setTextLimit(9);
        gridData = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
        gridData.widthHint = 167;
        textRequestId.setLayoutData(gridData);
        textRequestId.addVerifyListener(new VerifyListener() {
            public void verifyText(VerifyEvent e) {
                //检查输入的字符是否为数字0123456789,不在则返回-1
                boolean b=("0123456789".indexOf(e.text)>=0);
                e.doit=b;//其含义是如果doit==true,则允许输入,否则不允许
            }
        });
        textRequestId.addModifyListener(new ModifyListener() {
            public void modifyText(ModifyEvent e) {
                //validatePage();
            }
        });
       
        //将本次提交保存草稿
        btnIsDraft = new Button(groupRequsetInfo, SWT.CHECK);
        btnIsDraft.setText(RbSubclipseMessages.getString("PAGE_SAVE_AS_DRAFT"));
        btnIsDraft.setVisible( rbConfig.isAllowDraft() );
       
    }
View Full Code Here

Examples of com.taobao.eclipse.plugin.reviewboard.core.config.RbConfig

   
    /**
     * 给界面设置默认值,便于用户更方便地使用
     */
    public void setDefaultValue(){
        RbConfig rbConfig = RbConfigReader.getRbConfig(null);
        if( null != rbConfig ){
            if( null != textBranch ){
                textBranch.setText( null == rbConfig.getBranch() ? "" : rbConfig.getBranch().trim() );
            }
            txtPeople.setText( null == rbConfig.getPeoples() ? "" : rbConfig.getPeoples().trim() );
            txtGroup.setText( null == rbConfig.getGroups() ? "" : rbConfig.getGroups().trim() );
        }
    }
View Full Code Here

Examples of com.taobao.eclipse.plugin.reviewboard.core.config.RbConfig

        mainPage.setDescription(pageDescriptionSB.toString());
       
        requestOptionInfoWizardPage = new RequestOptionInfoWizardPage();
       
        addPage(mainPage);
        RbConfig rbConfig = RbConfigReader.getRbConfig(null);
        if( rbConfig.isAllowOptionalPageCommit() ){
            addPage(requestOptionInfoWizardPage);
        }
    }
View Full Code Here

Examples of com.taobao.eclipse.plugin.reviewboard.core.config.RbConfig

    }

    @Override
    public boolean performFinish() {
       
        RbConfig rbConfig = RbConfigReader.getRbConfig(null);
       
        if( !mainPage.validateTextField() ){
            return false;
        }
        try {
            File[] fileDiffs = null;
            //由于SVN生成diff时相对路径的问题,不得不引用此变量
            //详情:当client.diff(fromUrl, fromRevision, toUrl, toRevision, file, true)中fromUrl和toUrl是项目的baseUrlDir时,diff内容的路径正常
            //可是:当fromUrl和toUrl是选定的resouce的url时,diff内容的路径不正常,路径缺少部分前缀
            String diffUploadBaseUrl = null;
           
            String[] startAndStop = mainPage.getStartAndStopVersion();
           
            try {
               
                //临时编码解决方案。请以方法参数方式提供
                if( null != rbConfig.getCharsetEncoding() && !rbConfig.getCharsetEncoding().trim().equals(CHARSET_AUTO) ){
                    boolean isAcceptCharset = MessageDialog.openConfirm(getShell(),
                            RbSubclipseMessages.getString("WARNING_LABLE"),
                            MessageFormat.format(RbSubclipseMessages.getString("CHECK_DIFF_0"),
                                    new Object[]{ rbConfig.getCharsetEncoding(), CHARSET_AUTO }));
                    if(!isAcceptCharset){
                        return false;
                    }
                }
               
                if( null == resourcesSelectedByUser || resourcesSelectedByUser.length == 0 ){
                    /*History Post-commit 有两种情况:
                     * (1)右键Team,显示资源历史记录
                     * (2)尽可能支持 从SVN资源库直接打开历史记录的情况(这种情况下无法获得IResource)
                     * 对于情况2:由于无法获得IResource,因此必须用下面的特殊方式处理。
                     */
                    GeneratePostDiffBySVNUrlOperation generatePostDiffBySVNUrlOperation = new GeneratePostDiffBySVNUrlOperation(
                            null, !this.getSvnHistoryUrlIsFolder(), startAndStop[0], startAndStop[1],
                            this.getSvnHistoryUrl(), this.getSvnHistoryUrl());
                    getContainer().run(true, true, generatePostDiffBySVNUrlOperation);
                    fileDiffs = generatePostDiffBySVNUrlOperation.getFileDiffs();
                    diffUploadBaseUrl = this.getSvnHistoryUrlForBaseUpload();
                }
                else{
                    IResource[] mainPageSelectedResources = getResources();
                    if( null == mainPageSelectedResources || mainPageSelectedResources.length == 0 ){
                        MessageDialog.openError(getShell(),
                                RbSubclipseMessages.getString("ERROR_INFORMATION_LABLE"),
                                RbSubclipseMessages.getString("CHECK_DIFF_1")); //$NON-NLS-1$
                        return false;
                    }
                    try {
                        String repositoryRootUrl = RbSVNUrlUtils.getRepositoryRootUrlForResource(
                                (IResource)mainPageSelectedResources[0].getProject() );
                        diffUploadBaseUrl = repositoryRootUrl;
                    } catch (ReviewboardException e) {
                        MessageDialog.openError(getShell(), RbSubclipseMessages.getString("ERROR_INFORMATION_LABLE"), e.getMessage()); //$NON-NLS-1$
                        return false;
                    }
                   
                    GeneratePostMultiDiffOperation generatePostCommitDiffOperation = new GeneratePostMultiDiffOperation(
                            mainPageSelectedResources, startAndStop[0], startAndStop[1]);
                    getContainer().run(true, true, generatePostCommitDiffOperation);
                    fileDiffs = generatePostCommitDiffOperation.getFileDiffs();
                    Map<String, StringBuilder> diffContentSBByCharset = generatePostCommitDiffOperation.getDiffContentSBByCharset();
                    if( null != diffContentSBByCharset && !diffContentSBByCharset.isEmpty() && diffContentSBByCharset.size() > 1){
                        boolean isConfirm = MessageDialog.openConfirm(getShell(),
                                RbSubclipseMessages.getString("WARNING_LABLE"),
                                RbSubclipseMessages.getString("PROMPTING_ENCODING_0"));
                        if(!isConfirm){
                            return false;
                        }
                    }
                   
                }
            } catch (Exception e) {
                MessageDialog.openError(getShell(),
                        RbSubclipseMessages.getString("ERROR_INFORMATION_LABLE")
                        RbSubclipseMessages.getString("ERROR_COMMIT_1") + e.getMessage());
                return false;
            }
           
            if( null == fileDiffs || fileDiffs.length == 0 ){
                //未发现差异,无需提交信息到ReviewBoard。
                MessageDialog.openInformation(
                        getShell(),
                        Policy.bind("GenerateSVNDiff.noDiffsFoundTitle"), //$NON-NLS-1$
                        Policy.bind("GenerateSVNDiff.noDiffsFoundMsg")); //$NON-NLS-1$
                return false;
            }

            //提交信息到ReviewBoard服务器
            if( null == reviewboardClient ){
                MessageDialog.openError(getShell(),
                        RbSubclipseMessages.getString("ERROR_INFORMATION_LABLE"),
                        RbSubclipseMessages.getString("ERROR_SERVER_REQURIED")); //$NON-NLS-1$
                return false;
            }
           
            ModelReviewRequest reviewRequest = null;
            //如果是修改
            if(mainPage.isUpdate()){
                //先查找出
                reviewRequest = mainPage.getReviewRequest();
                //设置额外信息
                if( rbConfig.isAllowOptionalPageCommit() ){
                    requestOptionInfoWizardPage.setReviewRequestOptionalInfo(reviewRequest);
                }
            }else{//如果是新增
                reviewRequest = mainPage.getReviewRequest();
                //设置额外信息
                if( rbConfig.isAllowOptionalPageCommit() ){
                    requestOptionInfoWizardPage.setReviewRequestOptionalInfo(reviewRequest);
                }
            }

            if( null != reviewRequest
View Full Code Here

Examples of com.taobao.eclipse.plugin.reviewboard.core.config.RbConfig

                    }
                }
                if( null != svnRevisionHead ){
                    txtStop.setText( String.valueOf( svnRevisionHead.getNumber() ) );
                }
                RbConfig rbConfig = RbConfigReader.getRbConfig( null );
                //标记是否需要自动最小值
                boolean allowComputeStart = false;
                if( rbConfig.isAllowAllStartVersionGet() ){
                    allowComputeStart = true;
                }else if( rbConfig.isAllowBranchesStartVersionGet() ){
                    boolean isAllTag = RbSVNUrlUtils.isSvnUrlAllContainStr(projectSet, TAG_BRANCHES);
                    if( isAllTag ){
                        allowComputeStart = true;
                    }
                }
View Full Code Here

Examples of com.taobao.eclipse.plugin.reviewboard.core.config.RbConfig

                        continue;
                    }
                   
                    String charsetName = GuessStreamEncoding.getFileEncoding(tempDiffFile);
                   
                    RbConfig rbConfig = RbConfigReader.getRbConfig(null);
                    if( null != rbConfig.getCharsetEncoding() && !rbConfig.getCharsetEncoding().trim().equals(CHARSET_AUTO) ){
                        charsetName = rbConfig.getCharsetEncoding();
                    }
                   
                    String diffContentTmp = IOUtils.getContentFromFile( tempDiffFile, charsetName );

                    tempDiffFile.delete();
View Full Code Here

Examples of com.taobao.eclipse.plugin.reviewboard.core.config.RbConfig

                    return ;
                }
               
                String charsetName = GuessStreamEncoding.getFileEncoding(tempDiffFile);
               
                RbConfig rbConfig = RbConfigReader.getRbConfig(null);
                if( null != rbConfig.getCharsetEncoding() && !rbConfig.getCharsetEncoding().trim().equals(CHARSET_AUTO) ){
                    charsetName = rbConfig.getCharsetEncoding();
                }
               
                String diffContentTmp = IOUtils.getContentFromFile( tempDiffFile, charsetName );

                tempDiffFile.delete();
View Full Code Here
TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.