parent
							
								
									a524fd3e5a
								
							
						
					
					
						commit
						c9eb57132b
					
				| @ -0,0 +1,29 @@ | ||||
| 
 | ||||
| /* | ||||
|  * Copyright (C) 2016 AriaLyy(https://github.com/AriaLyy/Aria)
 | ||||
|  * | ||||
|  * Licensed 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 com.arialyy.aria.core.loader; | ||||
| 
 | ||||
| /** | ||||
|  * 用于初始化一些常用的常量 | ||||
|  */ | ||||
| public final class ConstantIntercept implements ILoaderInterceptor { | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|   @Override public ILoader intercept(Chain chain) { | ||||
|     return null; | ||||
|   } | ||||
| } | ||||
| @ -0,0 +1,29 @@ | ||||
| /* | ||||
|  * Copyright (C) 2016 AriaLyy(https://github.com/AriaLyy/Aria)
 | ||||
|  * | ||||
|  * Licensed 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 com.arialyy.aria.core.loader; | ||||
| 
 | ||||
| public interface ILoader { | ||||
| 
 | ||||
|   void start(); | ||||
| 
 | ||||
|   void stop(); | ||||
| 
 | ||||
|   void isBreak(); | ||||
| 
 | ||||
|   String getKey(); | ||||
| 
 | ||||
|   long getCurrentProgress(); | ||||
| } | ||||
| @ -0,0 +1,41 @@ | ||||
| /* | ||||
|  * Copyright (C) 2016 AriaLyy(https://github.com/AriaLyy/Aria)
 | ||||
|  * | ||||
|  * Licensed 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 com.arialyy.aria.core.loader; | ||||
| 
 | ||||
| import com.arialyy.aria.core.TaskRecord; | ||||
| import com.arialyy.aria.core.listener.IEventListener; | ||||
| import com.arialyy.aria.core.wrapper.ITaskWrapper; | ||||
| 
 | ||||
| /** | ||||
|  * 拦截器 | ||||
|  */ | ||||
| public interface ILoaderInterceptor { | ||||
| 
 | ||||
|   ILoader intercept(Chain chain); | ||||
| 
 | ||||
|   interface Chain { | ||||
| 
 | ||||
|     void updateRecord(TaskRecord record); | ||||
| 
 | ||||
|     TaskRecord getRecord(); | ||||
| 
 | ||||
|     IEventListener getListener(); | ||||
| 
 | ||||
|     ITaskWrapper getWrapper(); | ||||
| 
 | ||||
|     ILoader proceed(); | ||||
|   } | ||||
| } | ||||
| @ -0,0 +1,75 @@ | ||||
| /* | ||||
|  * Copyright (C) 2016 AriaLyy(https://github.com/AriaLyy/Aria)
 | ||||
|  * | ||||
|  * Licensed 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 com.arialyy.aria.core.loader; | ||||
| 
 | ||||
| import com.arialyy.aria.core.TaskRecord; | ||||
| import com.arialyy.aria.core.listener.IEventListener; | ||||
| import com.arialyy.aria.core.wrapper.ITaskWrapper; | ||||
| import java.util.List; | ||||
| 
 | ||||
| /** | ||||
|  * 责任链 | ||||
|  */ | ||||
| public final class LoaderChain implements ILoaderInterceptor.Chain { | ||||
|   private ITaskWrapper wrapper; | ||||
|   private IEventListener listener; | ||||
|   private TaskRecord taskRecord; | ||||
|   private int index; | ||||
|   private List<ILoaderInterceptor> interceptors; | ||||
| 
 | ||||
|   public LoaderChain(List<ILoaderInterceptor> interceptors, ITaskWrapper wrapper, | ||||
|       IEventListener listener, TaskRecord taskRecord, | ||||
|       int index) { | ||||
|     this.interceptors = interceptors; | ||||
|     this.wrapper = wrapper; | ||||
|     this.listener = listener; | ||||
|     this.taskRecord = taskRecord; | ||||
|     this.index = index; | ||||
|   } | ||||
| 
 | ||||
|   @Override public void updateRecord(TaskRecord record) { | ||||
|     this.taskRecord = record; | ||||
|   } | ||||
| 
 | ||||
|   @Override public TaskRecord getRecord() { | ||||
|     return taskRecord; | ||||
|   } | ||||
| 
 | ||||
|   @Override public IEventListener getListener() { | ||||
|     return listener; | ||||
|   } | ||||
| 
 | ||||
|   @Override public ITaskWrapper getWrapper() { | ||||
|     return wrapper; | ||||
|   } | ||||
| 
 | ||||
|   @Override public ILoader proceed() { | ||||
|     int index = this.index + 1; | ||||
|     if (index >= interceptors.size()) { | ||||
|       throw new AssertionError(); | ||||
|     } | ||||
| 
 | ||||
|     LoaderChain next = new LoaderChain(interceptors, wrapper, listener, taskRecord, index); | ||||
|     ILoaderInterceptor interceptor = interceptors.get(index); | ||||
|     ILoader loader = interceptor.intercept(next); | ||||
| 
 | ||||
|     if (loader == null) { | ||||
|       throw new NullPointerException("Loader为空"); | ||||
|     } | ||||
| 
 | ||||
|     return loader; | ||||
|   } | ||||
| } | ||||
| @ -0,0 +1,47 @@ | ||||
| /* | ||||
|  * Copyright (C) 2016 AriaLyy(https://github.com/AriaLyy/Aria)
 | ||||
|  * | ||||
|  * Licensed 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 com.arialyy.aria.core.loader; | ||||
| 
 | ||||
| public class LoaderIntercept implements ILoaderInterceptor, ILoader { | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|   @Override public ILoader intercept(Chain chain) { | ||||
| 
 | ||||
| 
 | ||||
|     return this; | ||||
|   } | ||||
| 
 | ||||
|   @Override public void start() { | ||||
| 
 | ||||
|   } | ||||
| 
 | ||||
|   @Override public void stop() { | ||||
| 
 | ||||
|   } | ||||
| 
 | ||||
|   @Override public void isBreak() { | ||||
| 
 | ||||
|   } | ||||
| 
 | ||||
|   @Override public String getKey() { | ||||
|     return null; | ||||
|   } | ||||
| 
 | ||||
|   @Override public long getCurrentProgress() { | ||||
|     return 0; | ||||
|   } | ||||
| } | ||||
| @ -0,0 +1,39 @@ | ||||
| /* | ||||
|  * Copyright (C) 2016 AriaLyy(https://github.com/AriaLyy/Aria)
 | ||||
|  * | ||||
|  * Licensed 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 com.arialyy.aria.core.loader; | ||||
| 
 | ||||
| import com.arialyy.aria.core.common.RecordHandler; | ||||
| import com.arialyy.aria.core.inf.IRecordHandlerAdapter; | ||||
| import com.arialyy.aria.core.wrapper.AbsTaskWrapper; | ||||
| 
 | ||||
| /** | ||||
|  * 任务记录拦截器,用于处理任务记录 | ||||
|  */ | ||||
| public final class RecordInterceptor implements ILoaderInterceptor { | ||||
|   private IRecordHandlerAdapter adapter; | ||||
| 
 | ||||
|   public RecordInterceptor(IRecordHandlerAdapter adapter) { | ||||
|     this.adapter = adapter; | ||||
|   } | ||||
| 
 | ||||
|   @Override public ILoader intercept(Chain chain) { | ||||
|     RecordHandler recordHandler = new RecordHandler((AbsTaskWrapper) chain.getWrapper()); | ||||
|     recordHandler.setAdapter(adapter); | ||||
|     chain.updateRecord(recordHandler.getRecord()); | ||||
| 
 | ||||
|     return chain.proceed(); | ||||
|   } | ||||
| } | ||||
					Loading…
					
					
				
		Reference in new issue