Политика применения нового элемента - ASPECTJ - PullRequest
0 голосов
/ 17 мая 2011

Я должен применить политику, выдающую предупреждение, если добавляются элементы, не принадлежащие к определенной категории, кроме трех разрешенных и запрещающих такие добавления .....

Пока яв состоянии найти предметы и выдать предупреждение .... но не уверен, как остановить их добавление .... Например:

Разрешенные категории Обувь и носки

но если я попытаюсьи добавьте овощной предмет в инвентарь, он должен дать мне предупреждение, говорящее «категория не разрешена ../ nПункт не будет добавлен в инвентарь» ..... а затем перейдите к следующему предмету ....

Это то, что я написал до сих пор .....

import org.aspectj.lang.*;

public aspect a8 {

  boolean check;

    pointcut deliverMessage(): call(* ShoppingCart.addItem(..));

    pointcut interestingcalls(String categorie): call(Item.new(..)) && args(*, *, categorie);

      before(String categorie): interestingcalls(categorie)
       { 
       if(categorie.equals("Shoes"))
        {        
       System.out.println("categorie detect:" +categorie);
        }
        else if(categorie.equals("socks"))
        {        
       System.out.println("categorie detect:" +categorie);
        }
        else
        {
        check=true;
        around(categorie);
        System.out.println("please check categorie" +categorie);
        }
    }

    around(String categorie): interestingcalls(categorie) {
            System.out.println("Start! "+categorie);
            proceed(categorie);
            System.out.println("End!");
    }
}

Я знаю, что я не правильно использую советы вокруг ...

1 Ответ

0 голосов
/ 19 мая 2011

То, что вы, вероятно, хотите, происходит так:

public aspect CartAspect {

    pointcut checkAdd(String categorie) : call (void ShoppingCart.addItem(*)) && args(categorie);

    void around(String categorie) : checkAdd(categorie) {
        System.out.println("Start! " + categorie);
        if (categorie.equals("shoes")) {
            System.out.println("categorie detect:" + categorie);
            proceed(categorie);
        } else if (categorie.equals("socks")) {
            System.out.println("categorie detect:" + categorie);
            proceed(categorie);
        } else {
            System.out.println("please check categorie " + categorie);
        }
        System.out.println("End!");
    }

}

Обратите внимание, что в случае, если категория отличается от "shoes" или "socks", мы НЕ вызываем метод continue ().

...