1 /****************************************************************
2 * Licensed to the Apache Software Foundation (ASF) under one *
3 * or more contributor license agreements. See the NOTICE file *
4 * distributed with this work for additional information *
5 * regarding copyright ownership. The ASF licenses this file *
6 * to you under the Apache License, Version 2.0 (the *
7 * "License"); you may not use this file except in compliance *
8 * with the License. You may obtain a copy of the License at *
9 * *
10 * http://www.apache.org/licenses/LICENSE-2.0 *
11 * *
12 * Unless required by applicable law or agreed to in writing, *
13 * software distributed under the License is distributed on an *
14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
15 * KIND, either express or implied. See the License for the *
16 * specific language governing permissions and limitations *
17 * under the License. *
18 ****************************************************************/
19
20 package org.apache.james.jdkim.impl;
21
22 import java.util.HashMap;
23 import java.util.List;
24 import java.util.Map;
25
26 import org.apache.james.jdkim.api.PublicKeyRecordRetriever;
27 import org.apache.james.jdkim.exceptions.PermFailException;
28 import org.apache.james.jdkim.exceptions.TempFailException;
29
30 public class MultiplexingPublicKeyRecordRetriever implements
31 PublicKeyRecordRetriever {
32
33 private Map/* String, PublicKeyRecordRetriever */retrievers;
34
35 public MultiplexingPublicKeyRecordRetriever() {
36 retrievers = new HashMap();
37 }
38
39 public MultiplexingPublicKeyRecordRetriever(String methodName,
40 PublicKeyRecordRetriever pkrr) {
41 this();
42 addRetriever(methodName, pkrr);
43 }
44
45 public void addRetriever(String methodName, PublicKeyRecordRetriever pkrr) {
46 retrievers.put(methodName, pkrr);
47 }
48
49 public List getRecords(CharSequence methodAndOption, CharSequence selector,
50 CharSequence token) throws TempFailException, PermFailException {
51 int pos = methodAndOption.toString().indexOf('/');
52 String method = pos != -1 ? methodAndOption.subSequence(0, pos)
53 .toString() : methodAndOption.toString();
54 PublicKeyRecordRetriever pkrr = (PublicKeyRecordRetriever) retrievers
55 .get(method);
56 if (pkrr != null) {
57 return pkrr.getRecords(methodAndOption, selector, token);
58 } else {
59 throw new PermFailException(
60 "Unknown public key record retrieving method: "
61 + methodAndOption);
62 }
63 }
64
65 }