// Path: src/main/java/org/wmaop/aop/advice/remit/Remit.java
// public interface Remit {
// 	boolean isApplicable();
// 	boolean isApplicable(Scope scope);
// }
// 
// Path: src/main/java/org/wmaop/aop/interceptor/FlowPosition.java
// public class FlowPosition {
// 
// 	public final String packageName;
// 	public final String serviceName;
// 	public final String fqname;
// 	private InterceptPoint interceptPoint;
// 	
// 	public FlowPosition(InterceptPoint point, String fqname) {
// 		interceptPoint = point;
// 		if (fqname == null) {
// 			serviceName = "";
// 			packageName = "";
// 			this.fqname = "";
// 		} else {
// 			this.fqname = fqname;
// 			int pkgsep = fqname.lastIndexOf(':');
// 			if (pkgsep == -1) {
// 				serviceName = fqname;
// 				packageName = "";
// 			} else {
// 				serviceName = fqname.substring(pkgsep + 1);
// 				packageName = fqname.substring(0, pkgsep);
// 			}
// 		}
// 	}
// 	
// 	@Override
// 	public String toString() {
// 		return fqname;
// 	}
// 
// 	public void setInterceptPoint(InterceptPoint point) {
// 		interceptPoint = point;
// 	}
// 
// 	public InterceptPoint getInterceptPoint() {
// 		return interceptPoint;
// 	}
// 
// 	public String getPackageName() {
// 		return packageName;
// 	}
// 
// 	public String getServiceName() {
// 		return serviceName;
// 	}
// 
// 	public String getFqname() {
// 		return fqname;
// 	}
// }
// 
// Path: src/main/java/org/wmaop/aop/interceptor/Interceptor.java
// public interface Interceptor {
// 
// 	InterceptResult intercept(FlowPosition flowPosition, IData idata);
// 
// 	int getInvokeCount();
// 
// 	String getName();
// 
// 	Map<String, Object> toMap();
// 
// }
// 
// Path: src/main/java/org/wmaop/aop/pointcut/PointCut.java
// public interface PointCut {
// 
// 	boolean isApplicable(FlowPosition pipelinePosition, IData idata);
// 
// 	InterceptPoint getInterceptPoint();
// 
// 	FlowPositionMatcher getFlowPositionMatcher();
// 
// 	Object toMap();
// }


import java.util.HashMap;
import java.util.Map;
import org.wmaop.aop.advice.remit.Remit;
import org.wmaop.aop.interceptor.FlowPosition;
import org.wmaop.aop.interceptor.Interceptor;
import org.wmaop.aop.pointcut.PointCut;
import com.wm.data.IData;
package org.wmaop.aop.advice;




public class Advice {

	private final PointCut pointCut;
	private final Interceptor interceptor;
	private final String id;
	private AdviceState adviceState = AdviceState.NEW;
	private final Remit remit;

// Path: src/main/java/org/wmaop/aop/advice/remit/Remit.java
// public interface Remit {
// 	boolean isApplicable();
// 	boolean isApplicable(Scope scope);
// }
// 
// Path: src/main/java/org/wmaop/aop/interceptor/FlowPosition.java
// public class FlowPosition {
// 
// 	public final String packageName;
// 	public final String serviceName;
// 	public final String fqname;
// 	private InterceptPoint interceptPoint;
// 	
// 	public FlowPosition(InterceptPoint point, String fqname) {
// 		interceptPoint = point;
// 		if (fqname == null) {
// 			serviceName = "";
// 			packageName = "";
// 			this.fqname = "";
// 		} else {
// 			this.fqname = fqname;
// 			int pkgsep = fqname.lastIndexOf(':');
// 			if (pkgsep == -1) {
// 				serviceName = fqname;
// 				packageName = "";
// 			} else {
// 				serviceName = fqname.substring(pkgsep + 1);
// 				packageName = fqname.substring(0, pkgsep);
// 			}
// 		}
// 	}
// 	
// 	@Override
// 	public String toString() {
// 		return fqname;
// 	}
// 
// 	public void setInterceptPoint(InterceptPoint point) {
// 		interceptPoint = point;
// 	}
// 
// 	public InterceptPoint getInterceptPoint() {
// 		return interceptPoint;
// 	}
// 
// 	public String getPackageName() {
// 		return packageName;
// 	}
// 
// 	public String getServiceName() {
// 		return serviceName;
// 	}
// 
// 	public String getFqname() {
// 		return fqname;
// 	}
// }
// 
// Path: src/main/java/org/wmaop/aop/interceptor/Interceptor.java
// public interface Interceptor {
// 
// 	InterceptResult intercept(FlowPosition flowPosition, IData idata);
// 
// 	int getInvokeCount();
// 
// 	String getName();
// 
// 	Map<String, Object> toMap();
// 
// }
// 
// Path: src/main/java/org/wmaop/aop/pointcut/PointCut.java
// public interface PointCut {
// 
// 	boolean isApplicable(FlowPosition pipelinePosition, IData idata);
// 
// 	InterceptPoint getInterceptPoint();
// 
// 	FlowPositionMatcher getFlowPositionMatcher();
// 
// 	Object toMap();
// }


// Path: src/main/java/org/wmaop/aop/advice/Advice.java
import java.util.HashMap;
import java.util.Map;
import org.wmaop.aop.advice.remit.Remit;
import org.wmaop.aop.interceptor.FlowPosition;
import org.wmaop.aop.interceptor.Interceptor;
import org.wmaop.aop.pointcut.PointCut;
import com.wm.data.IData;

package org.wmaop.aop.advice;




public class Advice {

	private final PointCut pointCut;
	private final Interceptor interceptor;
	private final String id;
	private AdviceState adviceState = AdviceState.NEW;
	private final Remit remit;

	public Advice(String id, Remit remit, PointCut pointCut, Interceptor interceptor) {